以下の例は、BTEQを使って、Avroオブジェクト コンテナをBLOBとしてロードする方法を示します。 ロード後、AvroContainerSplitテーブル演算子を使用して、DATASET STORAGE FORMAT AVRO型列のあるテーブルにAvro値を抽出できます。
この例では、3つのオブジェクト コンテナ ファイルがロードされます。
- BTEQ用の2つのフィールドを持つ、avro_containers.txtというインポート ファイルを作成します。最初のフィールドはコンテナID、2つ目のフィールドは、Object Containerファイルを含んだファイルの名前です。コンテナIDはINTEGER列にロードされ、ファイルは"BLOB as deferred by name"としてBLOBにロードされます。インポート ファイルの内容は可変テキスト形式です。
1|avro_1.db 2|avro_2.db 3|avro_3.db
- BLOBデータをインポートするための、BLOB列を含んだテーブルを作成します。
CREATE TABLE avro_containers(container_id INTEGER, container BLOB);
- テーブルとオブジェクト コンテナ ファイルをBTEQからロードします。
.import vartext file avro_containers.txt .repeat * USING (c1 VARCHAR(20), c2 BLOB AS DEFERRED BY NAME) INSERT INTO avro_containers(:c1, :c2);
- Avro値を保持するテーブルを作成します。
CREATE TABLE avro_table(container_id INTEGER, avro_obj_id INTEGER, avro DATASET STORAGE FORMAT AVRO);
- AvroContainerSplitテーブル演算子を使って、各コンテナからAvro値を抽出します。
INSERT INTO avro_table SELECT T.out_container_id, T.avro_object_id, T.avro_value FROM AvroContainerSplit (ON (SELECT container_id, container FROM avro_containers)) T;
3つすべてのコンテナ ファイルのAvro値がavro_tableテーブルにロードされ、コンテナIDおよび各コンテナID内のAvroオブジェクトIDで編成されます。
- JSON形式の最初の2つのAvroオブジェクトを最初のコンテナから選択します。
SELECT container_id, avro_obj_id, avro.tojson() FROM avro_table WHERE container_id = 1 AND avro_obj_id < 2 ORDER BY 1,2;