0

我在从 Azure SQL 数据仓库读取在 Azure HDInsight 中创建的 ORC 表时遇到问题。请参阅下面我遵循的顺序来设置 HDInsight 实例以及 Azure SQL 数据仓库。

  1. 我创建了一个文本文件(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







  1. 然后我在 Azure 中创建了一个 HDInsight 集群

  2. 我创建了一个数据库hadoopdb

  3. 我使用以下查询在该数据库中创建了一个外部表

    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';
    
  4. 使用以下查询加载数据

    LOAD DATA INPATH '/Sales.txt' INTO TABLE hadoopdb.salestxt;

  5. 然后使用以下脚本创建了一个内部 ORC 表

    CREATE TABLE IF NOT EXISTS hadoopdb.sales
    (
        salesdate int,
        productid int,
        salesamt float
    ) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS ORC;
    
  6. 使用以下查询将数据移动到 ORC 表

    插入覆盖表 hadoopdb.salesorc SELECT * FROM hadoopdb.salestxt

  7. 执行以下查询,我确实在 Hive Editor 中看到了结果

    select * from hadoopdb.sales

  8. 回到 Azure SQL 数据仓库,使用 SSMS 中的以下查询创建数据源,

    CREATE EXTERNAL DATA SOURCE ORCAzureStorage WITH 
    (
        TYPE = HADOOP,
        LOCATION = 'wasbs://<myclustercontainer>@<mystorageaccount>.blob.core.windows.net',
        CREDENTIAL = AzureStorageCredential
    

    );

  9. 使用以下创建外部文件格式

    CREATE EXTERNAL FILE FORMAT ORCdefault
    WITH 
    (   
        FORMAT_TYPE = ORC,
        DATA_COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'
    );
    
  10. 创建的架构[hdp]

  11. 尝试使用以下脚本创建外部表

    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”位置的存储帐户中。

我错过了什么吗?

4

1 回答 1

2

Azure SQL DW 当前不支持查询 HDFS。您需要将数据移动到 Windows Azure 存储 Blob。这里有一个教程

谢谢!凯西

于 2016-08-26T15:57:00.050 回答