17.10 - 例: BTEQを介したAvroオブジェクト コンテナ ファイルのBLOBとしてのロード - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - DATASETデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1198-171K-JPN
Language
日本語 (日本)

以下の例は、BTEQを使って、Avroオブジェクト コンテナをBLOBとしてロードする方法を示します。 ロード後、AvroContainerSplitテーブル演算子を使用して、DATASET STORAGE FORMAT AVRO型列のあるテーブルにAvro値を抽出できます。

この例では、3つのオブジェクト コンテナ ファイルがロードされます。

  1. 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
  2. BLOBデータをインポートするための、BLOB列を含んだテーブルを作成します。
    CREATE TABLE avro_containers(container_id INTEGER, container BLOB);
  3. テーブルとオブジェクト コンテナ ファイルをBTEQからロードします。
    .import vartext file avro_containers.txt
    
    .repeat *  
    USING (c1 VARCHAR(20), c2 BLOB AS DEFERRED BY NAME) INSERT INTO avro_containers(:c1, :c2);
  4. Avro値を保持するテーブルを作成します。
    CREATE TABLE avro_table(container_id INTEGER, avro_obj_id INTEGER, avro DATASET STORAGE FORMAT AVRO);
  5. 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で編成されます。

  6. 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;