2.4.11 Oracle SQL Access to Kafkaビューのカスタマイズ

Oracle SQL access to Kafka (OSaK)のORA_KAFKA.CREATE_VIEWSプロシージャは、Kafkaトピックの複数のパーティションからデータを取得する複数の外部表にマップされている、1つ以上のビューを作成します。各ビューには、トピック内の1つ以上のパーティションからデータが取得されます。

複数のパーティションの複数のビューを作成できることで、アプリケーションで、同時実行されている複数のアプリケーション・インスタンスにわたりワークロードを縮小および分割できます。Oracle SQL access to Kafka (OSaK)ビューを読み取るアプリケーション・インスタンスは1つのみである必要があります。ビューを読み取るインスタンスが複数あると、Kafkaレコードが重複して処理されるか、Kafkaレコードがスキップされる可能性があります。

デフォルトでは、ORA_KAFKA.CREATE_VIEWSプロシージャは、特定のクラスタ/グループ/トピックについてトピック・パーティションごとに1つのビューを作成します。たとえば、トピックに8つのパーティションがある場合、デフォルトでは8つのビューが作成されます。場合によっては、トピックのすべてのパーティションから1つのビューを作成すると役立つことがあります。また、複数のKafkaパーティションにつき1つのビューとし、複数のビューを作成すると役立つこともあります。たとえば、パーティション4つにつき1つのビューなどです。ORA_KAFKA.CREATE_VIEWSプロシージャには、ビュー数を指定できるオプション・パラメータがあります。

デフォルトでは、CSVと指定されているKafkaトピック・レコード形式は、フィールドがカンマで区切られておりレコードが改行で終了すると見なされます。ORA_KAFKA.CREATE_VIEWSプロシージャには、フィールドとレコードのデリミタを指定できるオプション・パラメータview_propertiesがあります。

PROCEDURE CREATE_VIEWS (
           cluster_name         IN  VARCHAR2,
           group_name           IN  VARCHAR2,
           topic_name           IN  VARCHAR2,
           topic_record_format  IN  VARCHAR2,
           ref_table            IN  VARCHAR2,
           views_created        OUT INTEGER,
           application_id       OUT VARCHAR2,
           view_count           IN  INTEGER DEFAULT 0,
           force_view_count     IN  BOOLEAN DEFAULT FALSE,
           view_properties      IN  VARCHAR2 DEFAULT NULL
);

view_countパラメータを使用すると、作成するビューの数をアプリケーションで指定できます。有効な値は0からNであり、ここでのNはトピック内のKafkaパーティションの数です。デフォルト値は0であり、これは、トピック内のKafkaパーティションごとに1つのビューを作成するようCREATE_VIEWSに指示します。

force_view_countパラメータには、TRUEまたはFALSEを指定できます。デフォルト値はFALSEです。force_view_countがTRUEに設定されている場合、ORA_KAFKA.CREATE_VIEWSは、view_count個のビューを作成します。指定したビュー数だと作成されるビュー同士がつりあわなくなる(読み取るKafkaトピック・パーティションの数がビューごとに異なる)場合でも同様です。たとえば、Kafkaトピック・パーティションが5つある場合にビュー数を2に設定すると、ORA_KAFKA.CREATE_VIEWSは、2つのKafkaトピック・パーティションにマップされている1つのビューと、3つのKafkaトピック・パーティションにマップされている1つのビューを作成します。

view_propertiesパラメータは、カスタムのフィールド・デリミタまたはレコード・デリミタ(あるいはその両方)を指定できるオプション・パラメータです。これは、JSON開発者ガイドに記載されているJSON構文でJSON文字列として書式設定されています(JSON開発者ガイド5 SQL/JSON条件IS JSONおよびIS NOT JSON)。

サポートされているキーは次のとおりです。
  • field_delim: json値としてのフィールド・デリミタ
  • record_delim: json値としてのレコード・デリミタ
次に例を示します。
{"field_delim":\u0001","record_delim":"\r\n"}
{"record_delim":"\r\n"}
{"field_delim":"\u0001"}