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"}