Azure HDInsight で作成された ORC テーブルを Azure SQL Data Warehouse から読み取る際に問題が発生しています。以下のシーケンスを参照して、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 | 43.70 20151225
| 3 |
3 | 65.90 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テーブルにデータを移動しました
INSERT OVERWRITE TABLE hadoopdb.salesorc SELECT * FROM hadoopdb.salestxt
次のクエリを実行すると、Hive エディターに結果が表示されます
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]
以下のスクリプトで EXTERNAL TABLE を作成しようとしています
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/' が存在しないため失敗しました。有効なパスを入力して、再試行してください。
「myclustercontainer@mystorageaccount.blob.core.windows.net/Sales.txt/Sales.txt」などの LOCATION のさまざまな組み合わせを試しました
Sales.txt ファイルは、場所 'myclustercontainer@mystorageaccount.blob.core.windows.net/Sales.txt/Sales.txt' のストレージ アカウントに存在します。
何か不足していますか?