我在从 Azure SQL 数据仓库读取在 Azure HDInsight 中创建的 ORC 表时遇到问题。请参阅下面我遵循的顺序来设置 HDInsight 实例以及 Azure SQL 数据仓库。
- 我创建了一个文本文件(Sales.txt),内容如下
20150614 | 1 | 10.50
20150618 | 1 | 100.75 20150924
| 1 | 89.75
20160214 | 2 | 10456.90 20150922
| 3 | 34.70
20151021 | 3 |
3
| 43.70 20150608|5|398.90 20150929|5|981.80 20151225|5|482.80 20151231|5|289.60 20160214|5|688.50 20160531|5|682.80
然后我在 Azure 中创建了一个 HDInsight 集群
我创建了一个数据库
hadoopdb
我使用以下查询在该数据库中创建了一个外部表
CREATE EXTERNAL TABLE IF NOT EXISTS hadoopdb.salestxt ( salesdate int, productid int, salesamt float ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' lines terminated by '\n' STORED AS TEXTFILE LOCATION 'wasbs:///<myclustercontainer>@<mystorageaccount>.blob.core.windows.net/Sales.txt';
使用以下查询加载数据
LOAD DATA INPATH '/Sales.txt' INTO TABLE hadoopdb.salestxt;
然后使用以下脚本创建了一个内部 ORC 表
CREATE TABLE IF NOT EXISTS hadoopdb.sales ( salesdate int, productid int, salesamt float ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS ORC;
使用以下查询将数据移动到 ORC 表
插入覆盖表 hadoopdb.salesorc SELECT * FROM hadoopdb.salestxt
执行以下查询,我确实在 Hive Editor 中看到了结果
select * from hadoopdb.sales
回到 Azure SQL 数据仓库,使用 SSMS 中的以下查询创建数据源,
CREATE EXTERNAL DATA SOURCE ORCAzureStorage WITH ( TYPE = HADOOP, LOCATION = 'wasbs://<myclustercontainer>@<mystorageaccount>.blob.core.windows.net', CREDENTIAL = AzureStorageCredential
);
使用以下创建外部文件格式
CREATE EXTERNAL FILE FORMAT ORCdefault WITH ( FORMAT_TYPE = ORC, DATA_COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec' );
创建的架构
[hdp]
尝试使用以下脚本创建外部表
CREATE EXTERNAL TABLE [hdp].FactSales ( salesdate int, productid int, salesamt float ) WITH ( LOCATION ='/Sales.txt', DATA_SOURCE = ORCAzureStorage , FILE_FORMAT = ORCdefault );
但是,此查询失败并出现以下错误
消息 105002,级别 16,状态 1,行 1 EXTERNAL TABLE 访问失败,因为指定的路径名“/Sales.txt/”不存在。请输入有效路径,然后重试。
我尝试了 LOCATION 的各种组合,例如“myclustercontainer@mystorageaccount.blob.core.windows.net/Sales.txt/Sales.txt”
Sales.txt 文件存在于“myclustercontainer@mystorageaccount.blob.core.windows.net/Sales.txt/Sales.txt”位置的存储帐户中。
我错过了什么吗?