从Azure SQL数据仓库

时间:2016-08-26 14:57:27

标签: azure hadoop orc azure-sqldw

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

  1. 我创建了一个文本文件(Sales.txt),内容如下
  2.   

    20150614 | 1 | 10.50
      20150618个| 1个| 100.75
      20150924个| 1个| 89.75
      20160214个| 2个| 10456.90
      20150922个| 3个| 34.70
      20151021个| 3个| 43.70
      20151225个| 3个| 65.90
      20151231个| 3个| 87.50
      20160101个| 4个| 1349.40
      20160512个| 4个| 3982.40
      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表

      INSERT OVERWRITE TABLE hadoopdb.salesorc    SELECT * FROM hadoopdb.salestxt

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

      select * from hadoopdb.sales

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

      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. 尝试使用

      下面的脚本创建EXTERNAL TABLE
      CREATE EXTERNAL TABLE [hdp].FactSales 
      (
          salesdate int,
          productid int,
          salesamt float  
      )
      WITH 
      (
          LOCATION    ='/Sales.txt',
          DATA_SOURCE = ORCAzureStorage , 
          FILE_FORMAT = ORCdefault                
      );
      
    12. 但是此查询失败并显示以下错误

      Msg 105002,Level 16,State 1,Line 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'。

      我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

Azure SQL DW目前不支持查询HDFS。您需要将数据移动到Windows Azure存储Blob。 这个here

有一个教程

谢谢! 凯西