この例では、Advanced SQL Engineテーブルから外部オブジェクト ストアにデータを書き込む方法を示します。
- まだ実行されていない場合は、許可オブジェクトと関数マッピングを設定します。WRITE_NOSの例に対する許可の設定を参照してください。
- まだ実行されていない場合は、データを抽出するデータベース テーブルを設定します。既存のテーブルのいずれかを使用するか、テスト テーブルを設定して例で使用できます。テスト テーブルの設定を参照してください。
- データを書き込む外部ストレージへのアクセスを設定または取得します。外部ストレージ ベンダーの指示に従います。
- データベース テーブルから外部オブジェクト ストアにデータの一部を書き込みます。例として、テスト テーブルからRiverFlowPermという名前のJSONデータを読み取り、それを外部ストレージに書き込みます。
SELECT NodeId, AmpId, Sequence, ObjectName, ObjectSize, RecordCount FROM WRITE_NOS_FM ( ON ( SELECT * FROM RiverFlowPerm WHERE DateTime = (TIMESTAMP '2018-07-01 00:00:00') ) USING LOCATION('YOUR-STORAGE-ACCOUNT/20180701/') STOREDAS('PARQUET') ) AS d ORDER BY AmpId;
LOCATIONを、データを書き込む外部オブジェクト ストアのURIに置き換えます。
WRITE_NOSは、データをParquetの形式で格納します。結果は次のようになります。
NodeId AmpId Sequence ObjectName ------ ----- -------- -------- -------------------------------------------------------------- 33 0 1 /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_0_1.parquet 33 1 1 /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_1_1.parquet 33 2 1 /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_2_1.parquet
- 書き込んだ外部オブジェクト ストアにアクセスするための外部テーブルを作成します。
CREATE FOREIGN TABLE ft20180701, EXTERNAL SECURITY DEFINER TRUSTED DefAuth_Write ( Location VARCHAR(2048) CHARACTER SET UNICODE CASESPECIFIC, SiteNo VARCHAR(8) CHARACTER SET UNICODE, DateTime TIMESTAMP(0) FORMAT 'YYYY-MM-DDBHH:MI', Flow FLOAT, GageHeight1 FLOAT, Precipitation FLOAT, Temperature FLOAT, Velocity FLOAT, BatteryVoltage FLOAT, GageHeight2 FLOAT, WaterVelocity FLOAT, Conductance FLOAT ) USING ( LOCATION('YOUR-STORAGE-ACCOUNT/20180701/') STOREDAS('PARQUET') ) PARTITION BY COLUMN;
LOCATIONを、データを書き込んだ外部オブジェクト ストアのURIに置き換えます。
- 外部データの行数をカウントします。
SELECT COUNT(*) FROM ft20180701;
結果:Count(*) -------- 12
- 外部データから1行をサンプリングします。
SELECT * FROM ft20180701 SAMPLE 1;
結果:Location /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_1_1.parquet SiteNo 09429070 DateTime 2018-07-01 00:00 Flow 1.54000000000000E 002 GageHeight1 6.06000000000000E 000 Precipitation ? Temperature 7.90000000000000E 001 Velocity 7.50000000000000E-001 BatteryVoltage ? GageHeight2 ? WaterVelocity ? Conductance ?
読みやすくするために、出力は縦に表示しています。
- データベース テーブルのデータの一部を外部に格納されているデータと比較します。まず、WHERE句で指定した条件に一致するデータベース テーブルの行数をカウントします。
SELECT COUNT(*) FROM RiverFlowPerm WHERE Temperature > 7.0 AND DateTime = (TIMESTAMP '2018-07-01 00:00:00');
結果:Count(*) -------- 4
次に、同じ基準に一致する外部オブジェクト ストアの行数をカウントします。
SELECT COUNT(*) FROM RiverFlowPerm s, ft20180701 ft WHERE s.SiteNo = ft.SiteNo AND s.Temperature > 7.0 AND s.DateTime = (TIMESTAMP '2018-07-01 00:00:00');
結果:Count(*) -------- 4
両方のクエリーの結果が一致するはずです。
- 外部オブジェクト ストアからオフロードされたデータのParquetスキーマを読み取ります。
SELECT DISTINCT(CAST(ParquetColumnName AS CHAR(15))) (NAMED Name), ParquetColumnPos (NAMED Pos), CAST(ParquetColumnPhysicalType AS CHAR(20)) (NAMED Physical), CAST(ParquetColumnLogicalType AS CHAR(20)) (NAMED Logical), CAST(TDColumnType AS CHAR(10)) (NAMED "Type"), ParquetColumnPrecision (NAMED "Precision"), ParquetColumnScale (NAMED Scale), ParquetColumnMinLength (NAMED "Min"), ParquetColumnMaxLength (NAMED "Max") FROM READ_NOS_FM1 ( USING LOCATION('YOUR-STORAGE-ACCOUNT/20180701/') STOREDAS('PARQUET') FULLSCAN('TRUE') RETURNTYPE('NOSREAD_PARQUET_SCHEMA') ) as d order by 2,1,3,4,5,6,7,8,9;
LOCATIONを、データを書き込んだ外部オブジェクト ストアのURIに置き換えます。
結果:
Name SiteNo Pos 1 Physical BYTE_ARRAY Logical UTF8 Type VARCHAR Precision 0 Scale 0 Min 8 Max 8 Name DateTime Pos 2 Physical INT64 Logical TIMESTAMP_MILLIS Type TIMESTAMP Precision 0 Scale 0 Min 0 Max 0 Name Flow Pos 3 Physical DOUBLE Logical NONE Type FLOAT Precision 0 Scale 0 Min 0 Max 0 [...]
読みやすくするために、出力は縦に表示しています。
前提条件
外部オブジェクト ストアへのデータの書き込み
外部オブジェクト ストレージのオフロード データの検証