Hive形式のソース・ファイル編成を使用した外部パーティション・データの問合せ
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEを使用して、外部パーティション表を作成し、クラウド・オブジェクト・ストアのファイル・パスからパーティション化情報を生成します。
オブジェクト・ストアで次のサンプル・ソース・ファイルを検討します。
custsales/month=2019-01/custsales-2019-01.csv
custsales/month=2019-02/custsales-2019-02.csv
custsales/month=2019-03/custsales-2019-03.csv
このネーミングでは、monthの値がオブジェクト名内で取得されます。
このサンプルHive形式で格納されたデータを含むパーティション化された外部表を作成するには、次の手順を実行します。
-
プロシージャ
DBMS_CLOUD.CREATE_CREDENTIALを使用したオブジェクト・ストア資格証明の格納。たとえば:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'DEF_CRED_NAME', username => 'adb_user@example.com', password => 'password' ); END; /リソース・プリンシパル資格証明を有効にする場合、Oracle Cloud Infrastructureオブジェクト・ストアにアクセスするための資格証明の作成は必要ありません。詳細は、リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスを参照してください。
この操作によって、資格証明が暗号化された形式でデータベースに格納されます。資格証明には任意の名前を使用できます。オブジェクト・ストアの資格証明を変更しないかぎり、このステップが必要なのは1回のみです。認証情報を一度格納したら、外部表の作成に同じ資格証明名を使用できます。
様々なオブジェクト・ストレージ・サービスの
usernameおよびpasswordパラメータの詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。 -
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEプロシージャを使用して、ソース・ファイルに基づいて外部パーティション表を作成します。プロシージャ
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEは、サポートされているクラウド・オブジェクト・ストレージ・サービスで、外部パーティション・ファイルをサポートします。資格証明は表レベルのプロパティであるため、外部ファイルはすべて同じクラウド・オブジェクト・ストア上に存在している必要があります。たとえば:
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE( TABLE_NAME => 'sales_sample', CREDENTIAL_NAME => 'DEF_CRED_NAME', FILE_URI_LIST => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet', FORMAT => '{"type":"parquet", "schema": "first","partition_columns":[{"name":"month","type":"varchar2(100)"}]}'); END; /パラメータは次のとおりです。
-
table_name: 外部表の名前です。 -
credential_name: 前のステップで作成された資格証明の名前です。 -
file_uri_list: ソース・ファイルURIのカンマ区切りリストです。このリストには、2つのオプションがあります。-
ワイルドカードを使用せずに個々のファイルURIのカンマ区切りリストを指定します。
-
ワイルドカードを含む単一のファイルURIを指定します(ワイルドカードは最後のスラッシュ"/"の後にのみ指定できます)。文字"*"は複数の文字のワイルドカードとして使用でき、文字"?"は1つの文字のワイルドカードとして使用できます。
-
-
column_list: 外部表の列名およびデータ型のカンマ区切りリストです。リストには、データ・ファイル内の列と、(ファイル・パスの名前から)オブジェクト名から導出された列が含まれます。データ・ファイルが構造化ファイル(Parquet、AvroまたはORC)の場合、
column_listは不要です。 -
format: ソース・ファイルのフォーマットを説明するために指定できるオプションを定義します。partition_columns formatパラメータでは、パーティション列の名前を指定します。ソースファイル内のデータが暗号化されている場合は、
encryption形式オプションを指定してデータを復号化します。データの復号化の詳細は、オブジェクト・ストレージからのインポート中のデータの復号化を参照してください。詳細は、DBMS_CLOUDパッケージ・フォーマット・オプションを参照してください。
この例では、
namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEコールは、次の表定義になります。CREATE TABLE "ADMIN"."SALES_SAMPLE" ( "DAY_ID" TIMESTAMP (6), "GENRE_ID" NUMBER(19,0), "MOVIE_ID" NUMBER(19,0), "CUST_ID" NUMBER(19,0), "APP" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP", "DEVICE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP", "OS" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP", "PAYMENT_METHOD" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP", "LIST_PRICE" BINARY_DOUBLE, "DISCOUNT_TYPE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP", "DISCOUNT_PERCENT" BINARY_DOUBLE, "ACTUAL_PRICE" BINARY_DOUBLE, "MONTH" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP" ) DEFAULT COLLATION "USING_NLS_COMP" ORGANIZATION EXTERNAL ( TYPE ORACLE_BIGDATA DEFAULT DIRECTORY "DATA_PUMP_DIR" ACCESS PARAMETERS ( com.oracle.bigdata.fileformat=parquet com.oracle.bigdata.filename.columns=["month"] com.oracle.bigdata.file_uri_list="https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet" com.oracle.bigdata.credential.schema="ADMIN" com.oracle.bigdata.credential.name=CRED_OCI com.oracle.bigdata.trimspaces=notrim ) ) REJECT LIMIT 0 PARTITION BY LIST ("MONTH") (PARTITION "P1" VALUES (('2019-01')) LOCATION ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-01/*.parquet' ), PARTITION "P2" VALUES (('2019-02')) LOCATION ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-02/*.parquet' )) PARALLEL ;パラメータの詳細は、「CREATE_EXTERNAL_PART_TABLEプロシージャ」を参照してください。
サポートされるクラウド・オブジェクト・ストレージ・サービスの詳細は、「DBMS_CLOUD URI形式」を参照してください。
-
-
これで、前のステップで作成した外部パーティション表に対して問合せを実行できます。
Autonomous AI Databaseは、外部パーティション表のパーティション化情報を利用して、問合せがオブジェクト・ストア内の関連データ・ファイルにのみアクセスするようにします。
たとえば:
SELECT movie_id, month FROM sales WHERE month='2019-02'DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEを使用して作成する外部パーティション表には、2つの非表示列file$pathとfile$nameが含まれます。これらの列は、レコードの取得元ファイルの識別に役立ちます。詳細は、外部表メタデータ列を参照してください。
指定したフォーマット・オプションに一致しない行がソース・ファイル内にある場合、問合せはエラーを報告します。rejectlimitなどのDBMS_CLOUDパラメータを使用して、これらのエラーを抑止できます。別の方法として、作成した外部パーティション表を検証し、エラー・メッセージと拒否された行を確認して、それに従ってフォーマット・オプションを変更することもできます。詳細は、「外部データの検証」および「外部パーティション・データの検証」を参照してください。