問合せ準備バケット: Data Studio APIを使用した自動表作成 (2025/04/25)

問合せ準備バケット: Data Studio APIを使用した自動表作成 (2025/04/25)

https://blogs.oracle.com/datawarehousing/post/query-ready-buckets-automatic-table-creation-using-data-studio-apis

投稿者: Jameson White | Principal Research Engineer, SQL & Analytics


はじめに


Oracle Autonomous Databaseでの表の作成がかつてないほど簡単になりました。この投稿では、問合せ対応バケットの概念を紹介します。このバケットでは、Data Studio APIを利用して、プロセスを自動化するOCIバケットおよびOCI関数に関連付けられたイベント・ルールによってトリガーされる自動表作成を有効にします。基本的に、オブジェクトがバケットに配置されると、追加のアクションを必要とせずにすぐに問合せ可能になります。この投稿は、PL/SQLでのData Studioデータ・ロードAPIの使用と、Bud EndressによるRESTデータ・サービスAPIを使用したデータ・ロードに関する優れた作業およびブログ投稿に触発されました。



ビジネス価値


Data Studio APIでサポートされているオブジェクト(CSVファイル、Parquetファイル、その他の形式など)をOCIバケットに簡単にアップロードでき、手動操作なしですぐに問合せできるようになることを想像してください。このアプローチにより、Autonomous Databaseへの表の構築およびロードのプロセスが簡素化および自動化されます。



ソリューション図


これが全てを成し遂げるために私たちがやることです。




ソリューション

Virtual Cloud Networking (VCN)、Object Storageバケット事前認証済リクエスト(PAR)、イベント・サービスおよびファンクション(Fn)の経験があることを前提としています。これらについてよく知らない場合は、リンクに従って、その特定の主題についてよりよく理解してください。


1) OCIバケットの管理

オブジェクト・ストレージ・バケットに対して「オブジェクト・イベントの出力」が有効になっていることを確認します。


オブジェクト・ストア・バケットで「オブジェクト・イベントの出力」を有効にすると、イベント・サービスでオブジェクト状態の変更を表示できます。




オブジェクト・ストレージ・バケットに事前認証済リクエストが設定されていることを確認します。


Alexey Filanovskiyによる、エキサイティングなブログ投稿、Oracle Autonomous Databaseでの事前認証済リクエストの新機能、および事前認証済URLを介したOracle Autonomous Databaseデータへのセキュアで簡単なアクセスを確認することをお勧めします。






2) Autonomous Databaseの管理


データベースURL、データベース・ユーザー名およびパスワード、およびクラウド・ストアの場所名をノートにとります。これらは、表を自動的に作成および移入するOCI Fnの作成に使用されます。この演習では、Autonomous Databaseはパブリックですが、選択した場合、VCNのプライベート・サブネットでも使用できます。


バケットのDatabase Studioでのクラウド・ストレージの場所の作成


詳細は「クラウド・ストレージ接続の管理」を参照してください。また、ここに示すようにData Studioで作成することもできます。この演習の目的上、クラウド・ストアの場所(OCI FnではSTORAGE_ALIASとして参照)はjawhitebucketです。




3)アプリケーションの作成、および表作成を自動化するOCI Fnの作成




Oracle Cloudコンソールのナビゲーション・メニューで、「Developer Services」→「Applications」に移動します。




環境変数の追加


注意: この方法でデータベース・パスワードを保存すると、セキュリティ・リスクが発生することに注意してください。Oracle Data Vaultを使用してパスワードを安全に格納および管理することをお薦めします。詳細は、Eugenio Galiano著『Oracle Database Vault: Oracle's Best-Kept Secret』を参照してください。このアプローチは、Todd SharpによるOracle FunctionからのAutonomous Databaseの問合せというブログ投稿に関連しています。




ファンクションの作成


つまり、コード・エディタを開き、「Hello World」などの事前作成済のサンプルpython関数を選択し、func.pyand requirements.txtファイルを編集して、アプリケーションをデプロイします。このプロセスに慣れていない場合は、Todd SharpによるServerless Oracle Functionsの呼出しに関する完全ガイドを参照してください。




requirements.txtファイルに「requests」行を追加します。


echo-e '\nrequests'>> requirements.txt echo-e '\nrequests'>> requirements.txtecho-e '\nrequests'>> requirements.txt echo-e '\nrequests'>> requirements.txt


func.pyの内容全体を次のpythonコードに置き換えます。


Target_Typeパラメータを編集して、外部表または通常の表のどちらを作成するかを選択できるコードに注意してください。


このブログでは、Parquet、CSVおよびCSV.GZファイルでのEXTERNAL_TABLEの使用、およびParquet、JSON、JSON.GZ、XLSX、CSVおよびCSV.GZ形式でのTABLEの使用を紹介しました。


<meta charset="UTF-8">


import io
import json
import os
import requests
    
def handler(ctx, data: io.BytesIO = None):
    # COLLECT EMIT BUCKET TRIGGERED EVENT PAYLOAD
    event_payload = json.loads(data.getvalue().decode('utf-8'))
    object_name = event_payload.get("data", {}).get("resourceName", "")
    object_name = str(object_name).strip()
    
    # GATHER ENVIRONMENT DETAILS PERTAINING TO DATABASE
    db_user = os.getenv("DB_USER")
    db_password = os.getenv("DB_PASSWORD")
    db_url = os.getenv("DB_URL")
    storage_alias = os.getenv("STORAGE_ALIAS")

    # PREPARE A USABLE TABLE NAME
    table_name = ''.join(filter(str.isalnum, os.path.splitext(os.path.splitext(object_name)[0])[0])).upper()
    
    # DATA STUDIO API SURVEY PREPARATION
    survey_payload = {
        "data_loads": [
            {
                "storage_link_name": storage_alias,
                "objects": [{"object_name": object_name}],
                "table_name": table_name,
#                "target_type": "EXTERNAL_TABLE"
                "target_type": "TABLE"
            }
        ]
    }
    
    # COLLECT SURVEY RESPONSE TO BE USED TO CREATE DATA LOAD JOB
    # THIS API GETS THE FORMAT, COLUMN LIST AND FIELD LIST IN JSON FORMAT
    # ALTHOUGH NOT COVERED HERE, PLEASE LOOK AT SURVEY CAPABILITIES
    survey_response = requests.post(
        f"{db_url}/ords/{db_user}/_/db-api/latest/data-tools/surveys/",
        json=survey_payload,
        auth=(db_user, db_password),
        headers={"accept": "application/json", "Content-Type": "application/json"} )
     
    data_survey = survey_response.json()
    
    # THIS CREATES THE DATA LOAD JOB USING DATA SURVEY
    requests.post(
        f"{db_url}/ords/{db_user}/_/db-api/latest/data-tools/data-loads/",
        json=data_survey,
        auth=(db_user, db_password),
        headers={"accept": "application/json", "Content-Type": "application/json"} )



4)イベント・ルールの作成


Oracle Cloudコンソールのナビゲーション・メニューで、「可観測性および管理」に移動し、「ルール」をクリックします。


このステップの目的は、バケットに追加されるオブジェクトを、表を作成するファンクションにリンクすることです。




これが面白い部分!

OCIバケットへのデータのアップロード


「バケット詳細」ページで、「オブジェクト」までスクロールしてください。テスト用の小さなファイルをアップロードしてください。


営業履歴(SH)スキーマからCSVファイルを2つアップロードし、人事(HR)からParquetファイルを1つバケットにアップロードしました。




表示される結果は次のとおりです。

SQL Developer



Data Studio





まとめ


示されているように、ファイルがアップロードされると、対応する表が自動的に作成され、手動操作を必要とせずにADB-Sインスタンスからアクセスできるようになりました。


今こそ、完全にクエリ可能なデータバケットでチームを強化する時です!


コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

Oracle GoldenGate 23aiでMicrosoft Fabricでのオープン・ミラーリングがサポートされるようになりました (2024/11/19)

Oracle Database Service for Azure(ODSA)とOracle Interconnect for Azureの比較 (2022/08/15)