17.6 ORACLE_BIGDATAデルタ共有へのアクセス

Linux Foundation Projects Delta Sharingデータ共有プロトコルをOracle Big Data Access Driverとともに使用する方法を参照してください

17.6.1 デルタ共有プロトコルの概要

ORACLE_BIGDATAアクセス・ドライバは、Delta Sharingオープン・プロトコルをサポートするようになりました。

ORACLE_BIGDATAアクセス・ドライバは、Linux Open Project Delta Sharingプロトコルをサポートしています。これは、Parquetに基づくオープン・プロトコルで、大規模なデータセットをセキュアかつスケーラブルにリアルタイムで共有できます。

17.6.2 Delta Sharing Protocolでサポートされている構成

Oracleは、カタログベースおよび非カタログベースのデータをサポートし、Apache Iceberg表形式を使用したParquetデータ形式をサポートしています。

アクセス・プロトコル: delta-sharing デルタ共有データセットにアクセスするには、このプロトコルが必要です。

資格証明のタイプ
  • Bearerトークン: この資格証明タイプは、一時アクセスに適しています。明示的なトークン・リフレッシュが必要です。
  • クライアントID/シークレット: この資格証明タイプは、自動トークン・リフレッシュを有効にします。Oracleでは、Oracle管理のDelta Shareサーバーへの長期アクセスにこのタイプを使用することをお薦めします。

17.6.3 デルタ共有用の資格証明の作成

これらの例を使用して、Bearerトークン資格証明オブジェクトまたはクライアントID/シークレット資格証明オブジェクトを作成してDelta Sharingにアクセスする方法を確認します。

例17-20 デルタ共有用のBearerトークン資格証明の作成

BEGIN
    DBMS_CREDENTIAL.CREATE_CREDENTIAL (
        credential_name => 'DATABRICKS',
        username        => 'BEARER_TOKEN',
        password        => 'faaie590d541265bcab1f2de9813274bf233'
    );
END;

例17-21 Oracle管理デルタ共有用のクライアントID/シークレット資格証明の作成

BEGIN
    DBMS_CREDENTIAL.CREATE_CREDENTIAL (
        credential_name => 'DRIVER_CLIENT_ID',
        username        => '_GEVd3cSVYYJtZ...68Q0VINQ..',   -- client ID
        password        => 'IV3gncgr0p6Mk...1WwmQ2uUg..'   -- client secret
    );
END;

17.6.4 デルタ共有メタデータのリストと説明

LISTファイル形式をリストする方法と、DESCファイル形式を使用してデルタ共有、スキーマおよび表を記述する方法を参照してください。

例17-22 デルタ共有コンテンツのリスト

LISTファイル形式を使用して、デルタ共有、スキーマおよび表の内容をリストできます。場所パスによって、取得される詳細のレベルが決まります。たとえば:

SELECT DISTINCT url
FROM EXTERNAL (
     ( url VARCHAR2(200) )
     TYPE ORACLE_BIGDATA
     ACCESS PARAMETERS (
          com.oracle.bigdata.fileformat = list,
          com.oracle.bigdata.credential.name = DATABRICKS,
          com.oracle.bigdata.access_protocol = delta_sharing
     )
     LOCATION (
          'https://sharing.delta.io/delta-sharing/#',                          -- Shares
          'https://sharing.delta.io/delta-sharing/#delta_sharing',             -- Share schemas
          'https://sharing.delta.io/delta-sharing/#delta_sharing.default'      -- Share tables
     )
     REJECT LIMIT UNLIMITED
);

URL
--------------------------------------------------------------------------------
https://sharing.delta.io/delta-sharing/#delta_sharing.default.COVID_19_NYT
https://sharing.delta.io/delta-sharing/#delta_sharing.default.boston-housing
https://sharing.delta.io/delta-sharing/#delta_sharing.default.flight-asa_2008
https://sharing.delta.io/delta-sharing/#delta_sharing.default.lending_club
https://sharing.delta.io/delta-sharing/#delta_sharing.default.nyctaxi_2019
https://sharing.delta.io/delta-sharing/#delta_sharing.default.nyctaxi_2019_part
https://sharing.delta.io/delta-sharing/#delta_sharing.default.owid-covid-data
https://sharing.delta.io/delta-sharing/#delta_sharing.default
https://sharing.delta.io/delta-sharing/#delta_sharing

例17-23 デルタ共有表の説明

特定のデルタ共有表の列定義を取得するには、DESCファイル形式を使用します。たとえば:

SELECT *
FROM EXTERNAL (
    (
        "path"       VARCHAR2(4000 BYTE),
        "oratype"    VARCHAR2(40 BYTE),
        scale         NUMBER,
        precision     NUMBER,
        filetype      VARCHAR2(400),
        compression   VARCHAR2(400),
        "partoflist" NUMBER(1),
        "depth"      NUMBER(19)
    )
    TYPE ORACLE_BIGDATA
    ACCESS PARAMETERS (
        com.oracle.bigdata.credential.name = 'DATABRICKS',
        com.oracle.bigdata.fileformat = desc,
        com.oracle.bigdata.access_protocol = delta_sharing
    )
    LOCATION (
        'https://sharing.delta.io/delta-sharing/#DELTA_SHARING.DEFAULT.BOSTON-HOUSING'
    )
    REJECT LIMIT UNLIMITED
)
ORDER BY "path";

path       oratype          SCALE    PRECISION    FILETYPE    COMPRESSION    partoflist    depth   
ID         NUMBER(10)              0           10 Parquet     snappy                              1
age        BINARY_DOUBLE           0           15 Parquet     snappy                              1
black      BINARY_DOUBLE           0           15 Parquet     snappy                              1
chas       NUMBER(10)              0           10 Parquet     snappy                              1
crim       BINARY_DOUBLE           0           15 Parquet     snappy                              1
dis        BINARY_DOUBLE           0           15 Parquet     snappy                              1
indus      BINARY_DOUBLE           0           15 Parquet     snappy                              1
lstat      BINARY_DOUBLE           0           15 Parquet     snappy                              1
medv       BINARY_DOUBLE           0           15 Parquet     snappy                              1
nox        BINARY_DOUBLE           0           15 Parquet     snappy                              1
ptratio    BINARY_DOUBLE           0           15 Parquet     snappy                              1
rad        NUMBER(10)              0           10 Parquet     snappy                              1
rm         BINARY_DOUBLE           0           15 Parquet     snappy                              1
tax        NUMBER(10)              0           10 Parquet     snappy                              1
zn         BINARY_DOUBLE           0           15 Parquet     snappy                              1

 

17.6.5 デルタ共有アクセス・パラメータ

Oracleでは、デルタ共有アクセスを定義するORACLE_BIGDATAアクセス・パラメータがサポートされています。

表17-7 Iceberg固有のアクセス・パラメータ

パラメータ 説明 必須

com.oracle.bigdata.delta_sharing.token_endpoint

JSONプロファイル・ファイルで定義されているトークン・エンドポイント。

クライアントID/シークレット資格証明に必要です。

.

オプション

com.oracle.bigdata.access_protocol

: delta-sharing

デルタ共有のプロトコル。

あり

com.oracle.bigdata.fileformat

: parquet

デルタ共有表にアクセスするときに使用します。このパラメータは省略可能で、デルタ共有アクセスのデフォルトです。

: list

デルタ共有のメタデータの導出、スキーマの共有および表の共有に使用されます。

: desc

デルタ共有の列定義を取得するために使用されます。

オプション

17.6.6 デルタ共有用の外部表の作成の例

次の例は、Bearerトークン資格証明を使用して、クライアントID/シークレット資格証明を使用して表を作成する方法を示しています。

例17-24 Bearerトークン資格証明の使用

この例では、既知のデルタ共有表を参照する外部表を作成します。

CREATE TABLE BOSTONHOUSING (
    "ID"        NUMBER(10,0),
    "crim"      BINARY_DOUBLE,
    "zn"        BINARY_DOUBLE,
    "indus"     BINARY_DOUBLE,
    "chas"      NUMBER(10,0),
    "nox"       BINARY_DOUBLE,
    "rm"        BINARY_DOUBLE,
    "age"       BINARY_DOUBLE,
    "dis"       BINARY_DOUBLE,
    "rad"       NUMBER(10,0),
    "tax"       NUMBER(10,0),
    "ptratio"   BINARY_DOUBLE,
    "black"     BINARY_DOUBLE,
    "lstat"     BINARY_DOUBLE,
    "medv"      BINARY_DOUBLE
)
ORGANIZATION EXTERNAL (
    TYPE ORACLE_BIGDATA
    DEFAULT DIRECTORY "DATA_PUMP_DIR"
    ACCESS PARAMETERS (
        com.oracle.bigdata.credential.name = 'DATABRICKS',
        com.oracle.bigdata.fileformat = parquet,
        com.oracle.bigdata.access_protocol = delta_sharing
    )
    LOCATION (
        'https://sharing.delta.io/delta-sharing/#DELTA_SHARING.DEFAULT.BOSTON-HOUSING'
    )
)
REJECT LIMIT UNLIMITED
PARALLEL;
Alternatively, user can create table with dbms_cloud package:

BEGIN
  DBMS_CLOUD.CREATE_EXTERNAL_TABLE
  ( TABLE_NAME        => 'BOSTONHOUSING'
   ,CREDENTIAL_NAME   => 'DATABRICKS'
   ,FILE_URI_LIST     => 'https://sharing.delta.io/delta-sharing/#DELTA_SHARING.DEFAULT.BOSTON-HOUSING'
   ,COLUMN_LIST       => '"ID"       NUMBER(10)
    ,"crim"     BINARY_DOUBLE
    ,"zn"       BINARY_DOUBLE
    ,"indus"    BINARY_DOUBLE
    ,"chas"     NUMBER(10)
    ,"nox"      BINARY_DOUBLE
    ,"rm"       BINARY_DOUBLE
    ,"age"      BINARY_DOUBLE
    ,"dis"      BINARY_DOUBLE
    ,"rad"      NUMBER(10)
    ,"tax"      NUMBER(10)
    ,"ptratio"  BINARY_DOUBLE
    ,"black"    BINARY_DOUBLE
    ,"lstat"    BINARY_DOUBLE
    ,"medv"     BINARY_DOUBLE'
   ,FORMAT            => '{
       "type" : "parquet",
       "access_protocol" : "delta_sharing"
     }'
  );
END;

例17-25 クライアントID/シークレット資格証明の使用

Oracle管理のデルタ共有表の場合、自動トークン・リフレッシュ用のトークン・エンドポイントを含めます。たとえば:

CREATE TABLE DRIVER_REFRESH (
    "DRIVER_ID" INTEGER,
    "NAME"      VARCHAR2(4000 BYTE),
    "POINTS"    INTEGER,
    "TEAM_ID"   INTEGER
)
ORGANIZATION EXTERNAL (
    TYPE ORACLE_BIGDATA
    DEFAULT DIRECTORY "DATA_PUMP_DIR"
    ACCESS PARAMETERS (
        com.oracle.bigdata.credential.name = 'DRIVER_CLIENT_ID',
        com.oracle.bigdata.delta_sharing.token_endpoint = 'https://abcde...xyz.adb.ap-tokyo-1.oraclecloudapps.com/ords/jason/oauth/token',
        com.oracle.bigdata.fileformat = parquet,
        com.oracle.bigdata.access_protocol = delta_sharing
    )
    LOCATION (
        'https://abcde...xyz.adb.ap-tokyo-1.oraclecloudapps.com/ords/jason/_delta_sharing#DELTA23AIPROD.JASON.DRIVER'
    )
)
REJECT LIMIT UNLIMITED
PARALLEL;