このドキュメントでは、Realtime Compute の DDL 文と、フィールドマッピング、大文字と小文字の区別など、DDL の使用中に注意が必要な問題について説明します。

構文

CREATE TABLE tableName
      (columnName dataType [, columnName dataType ]*)
      [ WITH (propertyName=propertyValue [, propertyName=propertyValue ]*) ];
			

説明

Realtime Compute は、ビルトインデータストレージ機能を提供していません。 したがって、テーブルの作成に関係するすべての DDL 文は、外部データテーブルまたはストレージシステムの参照宣言です。 サンプルコードは次のとおりです。

CREATE TABLE mq_stream(
 a VARCHAR,
 b VARCAHR,
 c VARCAHR
) WITH (
 type='mq',
 topic='blink_mq_test',
 accessId='yourAccessId',
 accessKey='yourAccessKey'
);

上記のコードでは Flink SQL の MQ ソーステーブルtopic を作成しません。 代わりに、mq_stream という名前のテーブルへの参照を宣言します。 ダウンストリーム演算子のこの MQ トピックに関連するすべての DML 操作に関して、トピック名をエイリアス mq_stream に置き換えることができます。

  • テーブルの宣言は、Realtime Compute の現在のジョブでのみ有効です。 SQL ファイルが送信されると、Realtime Compute ジョブが生成されます。 mq_stream テーブルの上記の宣言は、現在の SQL ファイルでのみ有効です。 同じ Realtime Compute プロジェクト内の他の SQL ファイルでも mq_stream テーブルを宣言できます 。
  • 標準 SQL 定義によれば、DDL 文のキーワード、テーブル名、およびフィールド名は大文字と小文字を区別しません。
  • テーブル名とフィールド名は、英数字で始める必要があり、英数字、アンダースコア (_) のみ使用できます。
  • 使用するアップストリームプラグインの性質に応じて、DDL 宣言は、フィールド名だけでなく他の要因に基づき、宣言テーブルと外部テーブル間のフィールドマッピングを確立する場合があります。 参照される外部テーブルと同じフィールド名、およびフィールド数を宣言することを推奨します。 これにより、分かりにくい宣言によるデータエラーを防ぐことができます。
    アップストリームプラグインが、key-value ペアのキーに基づいた値の取得をサポートしている場合、宣言テーブルとその参照される外部テーブルは、同じ数のフィールドを持つ必要はありません。 ただし、フィールド名は同じである必要があります。 アップストリームプラグインがキーに基づく値の取得をサポートしていない場合、フィールドの数とその順序は、宣言テーブルと外部テーブルで同じでなければなりません。

フィールドマッピング

外部データソースにスキーマがあるかどうかに応じて、宣言テーブルでは 2 つのフィールドマッピングメソッドをサポートしています。
  • 順次マッピング

    このメソッドは、スキーマのないデータソース (MQ など) に適用されます。 これらのデータソースは通常、キーに基づく値の取得をサポートしない非構造化ストレージシステムです。 DDL SQL 文のフィールド名をカスタマイズし、外部テーブルと同じフィールドタイプと同じフィールド数を宣言テーブルで使用することを推奨します。

    MQ のサンプルレコードは次のとおりです。

    asavfa,sddd32,sdfdsv

    命名規則に従って MQ フィールド名を指定します。

    CREATE TABLE mq_stream(
     a VARCHAR,
     b VARCHAR,
     c VARCAHR
    ) WITH (
     type='mq',
     topic='blink_mq_test',
     accessId='yourAccessId',
     accessKey='yourAccessSecret'
    );
  • 名前マッピング
    このメソッドは、スキーマを持つデータソースに適用されます。 これらのデータストレージシステムは、テーブルストレージレベルでフィールド名とフィールドタイプを定義し、キーに基づいた値の取得をサポートします。 Flink SQL 宣言では、外部データストレージシステムと同じスキーマ定義を使用することを推奨します。 具体的には、宣言テーブルのフィールドの名前、番号、および順序は、外部テーブルのフィールドと同じでなければなりません。
    外部データストレージシステムのフィールド名が大文字と小文字を区別する場合 (たとえば   Table Store)、大文字と小文字を区別するフィールド名をバッククォート (`) で囲みます。 DDL 構文では、宣言テーブルのフィールド名は外部テーブルのフィールド名と同じでなければなりません。

大文字と小文字の区別

標準 SQL 定義では、フィールドは大文字と小文字を区別しません。 たとえば、次の 2 つのステートメントの意味は同じです。

create table stream_result (
    name varchar,
    value varchar
);
create table STREAM_RESULT (
    NAME varchar,
    VALUE varchar
);

ただし、Realtime Compute によって参照されるほとんどの外部データソースでは大文字と小文字が区別されます。 たとえば、Table Store では大文字と小文字が区別されます。 次のステートメントは、Table Store の大文字の NAME フィールドを定義する方法を示しています。

create  table STREAM_RESULT (
    `NAME` varchar,
    `VALUE` varchar
);

次のステートメントで示すように、参照されるたびに後続のすべての DML 文で、フィールドをバッククォート (`) で囲みます。

INSERT INTO table_a
SELECT
  `NAME`,
  `VALUE`
FROM
  table_b;

関連トピック

Realtime Compute でソーステーブル、ディメンションテーブル、結果テーブルを作成する方法の詳細については、以下のトピックをご参照ください。