2.4.10 一時表へのKafkaデータのロード

Oracle SQL Access to Kafka (OSaK)ビューは、Oracle内のトランザクション非対応のKafkaアプリケーションです。ビューをスキャンするたびに新しい結果が生成される可能性があります。これは、ビューは通常はオフセットからトピックの最高水位標(使用可能な最新レコード)までのKafkaレコードをスキャンし、その最高水位標は前進し続けるためです。

1つのOSaKビューから取得した同じデータ・セットに複数のSQL問合せを実行し、それらすべてにわたり一貫性が必要な場合は、その一貫性の問題を解決する必要があります。また、OSaKビューとの複雑な結合を実行する場合は問題が起こりやすく、SQL問合せにおいて、OSaKビューが結合で確実に最も外側の表となるよう丁寧に示す必要があります。

OSaKプロシージャ(ORA_KAFKA.LOAD_PRIVATE_TEMP_TABLEおよびORA_KAFKA.LOAD_GLOBAL_TEMP_TABLE)は、SELECT * FROM <view_name>(ここでのview_nameはOSaKビュー)によって一時表を作成することでこれらの問題を解決します。これにより、1つの問合せによって取得されたデータが、一時表にマテリアライズされます。ORA_KAFKA.LOAD_[PRIVATE|GLOBAL]_TEMP_TABLEプロシージャは通常、ORA_KAFKA.NEXT_OFFSETまたはORA_KAFKA.SEEK_OFFSET/ORA_KAFKA.SEEK_OFFSET_TSをコールした直後にコールされます。アプリケーション・ロジックは、その後、OSaKビューを直接問い合せるのではなく、一時表のコンテンツに対して問合せを実行します。

プライベート一時表とグローバル一時表という2種類の一時表が役立ちます。これらの表は、それぞれORA_KAFKA.LOAD_PRIVATE_TEMP_TABLEまたはORA_KAFKA.LOAD_GLOBAL_TEMP_TABLEプロシージャを呼び出すことで作成されます。グローバル一時表とプライベート一時表の主な違いは、グローバル一時表はより機能が多く索引およびトリガーをサポートしているが、プライベート一時表は軽量で索引またはトリガーをサポートしていないという点です。