ORC、ParquetまたはAvroソース・ファイルを使用した外部データの問合せ
Autonomous Databaseを使用すると、外部表を使用してオブジェクト・ストアに格納されているORC、ParquetまたはAvroデータに簡単にアクセスできます。 ORC、ParquetおよびAvroソースにはメタデータが埋め込まれており、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャではこのメタデータを使用して外部表の作成を簡略化できます。
データの構造を知る必要はありません。DBMS_CLOUDでは、ファイルを調べてORC、ParquetまたはAvroコンテンツを同等のOracle列およびデータ型に変換できます。 オブジェクト・ストア内のデータのロケーションを把握し、そのタイプ(ORC、ParquetまたはAvro)を指定し、オブジェクト・ストア上のソース・ファイルにアクセスするための資格証明を持っていることのみが必要です。
ノート:
ORC、ParquetおよびAvroでは、外部表を使用するステップはよく似ています。 これらのステップは、Parquetフォーマットのソース・ファイルの操作を示しています。この例のsales_extended.parquetのソース・ファイルには、Parquet形式のデータが含まれます。 Autonomous Databaseでこのファイルを問い合せる手順は、次のとおりです:
- プロシージャ
DBMS_CLOUD.CREATE_CREDENTIALを使用してオブジェクト・ストアにアクセスするため、オブジェクト・ストア資格証明を格納します:BEGINDBMS_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_TABLEプロシージャを使用して、ORC、ParquetまたはAvroの外部表をソース・ファイルの上に作成します。プロシージャ
DBMS_CLOUD.CREATE_EXTERNAL_TABLEは、サポートされているクラウド・オブジェクト・ストレージ・サービスの外部ファイルをサポート: Oracle Cloud Infrastructure Object Storage、Azure BlobストレージまたはAzure Data Lakeストレージ、Amazon S3およびAmazon S3互換: Oracle Cloud Infrastructure Object Storage、Google Cloud StorageおよびWasabi Hot Cloud Storage。 資格証明は表レベルのプロパティであるため、外部ファイルは同じオブジェクト・ストア上にある必要があります。デフォルトでは、外部表で作成された列のデータ型は、ソース・ファイルで見つかったフィールドのOracleデータ型に自動的にマップされ、外部表の列名はソース・フィールド名と一致します。
BEGINDBMS_CLOUD.CREATE_EXTERNAL_TABLE( table_name =>'sales_extended_ext', credential_name =>'DEF_CRED_NAME', file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet', format => '{"type":"parquet", "schema": "first"}' ); END; /パラメータは次のとおりです:
-
table_name: 外部表名です。 -
credential_name: 前のステップで作成した資格証明の名前です。credential_nameパラメータは、Oracleオブジェクトのネーミング規則に準拠している必要があります。 詳細については、「データベース・オブジェクトのネーミング・ルール」を参照してください。 -
file_uri_list: 問い合せるソース・ファイルのカンマ区切りリストです。 専用エンドポイントの「The URI」形式は、商用(OC1)レルムでサポートされています。 詳細は、「オブジェクト・ストレージ専用エンドポイント」および「DBMS_CLOUD URIの書式」を参照してください。 -
format: ソース・ファイルのフォーマットを記述するオプションを定義します。 Parquetファイルの場合は、formatパラメータを使用してtypeparquetを指定します。 Avroファイルの場合、formatパラメータを使用してtypeavroを指定します。 ORCファイルの場合は、formatパラメータを使用してtypeorcを指定します。
この例では、
namespace-stringがOracle Cloud Infrastructureオブジェクト・ストレージのネームスペースで、bucketnameがバケット名です。 詳細については、「オブジェクト・ストレージのネームスペースについて」を参照してください。デフォルトでは、
formatschemaパラメータが設定され、列とデータ型が自動的に導出され、ソースのフィールドは名前で外部表の列と一致します。 ソース・データ型は、ORC、ParquetまたはAvroデータ型のDBMS_CLOUDマッピングに従って、外部表の列のOracleデータ型に変換されます。 有効なschemaパラメータ値は次のとおりです:-
first: 指定されたfile_uri_list(firstがschemaのデフォルト値)でDBMS_CLOUDによって検出された最初のORC、ParquetまたはAvroファイルのスキーマを分析します。 -
all:file_uri_listで見つかったORC、ParquetまたはAvroファイルのすべてのスキーマを分析します。 これらはオブジェクト・ストア内で取得されるファイルのみであるため、各ファイルのメタデータが同じであることは保証されません。 たとえば、File1には"address"というフィールドが含まれ、File2ではそのフィールドが欠落している場合があります。 各ファイルを調べて列を導出するほうが、費用がかかりますが、最初のファイルにすべての必須フィールドが含まれていない場合は必須です。
ノート:
column_listパラメータを指定すると、外部表とschema値の列名およびデータ型を指定します(指定した場合は無視されます)。column_listを使用して、外部表の列を制限できます。column_listが指定されていない場合、schemaのデフォルト値はfirstです。-
- これで、前のステップで作成した外部表に対して問合せを実行できます:
DESC sales_extended_ext; Name Null? Type -------------- ----- -------------- PROD_ID NUMBER(10) CUST_ID NUMBER(10) TIME_ID VARCHAR2(32767) CHANNEL_ID NUMBER(10) PROMO_ID NUMBER(10) QUANTITY_SOLD NUMBER(10) AMOUNT_SOLD NUMBER(10,2) GENDER VARCHAR2(32767) CITY VARCHAR2(32767) STATE_PROVINCE VARCHAR2(32767) INCOME_LEVEL VARCHAR2(32767)SELECT prod_id, quantity_sold, gender, city, income_level FROM sales_extended_ext WHERE ROWNUM < 8; PROD_ID QUANTITY_SOLD GENDER CITY INCOME_LEVEL 1 13 1 M Adelaide K: 250,000 – 299,999 2 13 1 M Dolores L: 300,000 and above 3 13 1 M Cayuga F: 110,000 – 129,999 4 13 1 F Bergen op Zoom C: 50,000 – 69,999 5 13 1 F Neuss J: 190,000 – 249,999 6 13 1 F Darwin F: 110,000 – 129,999 7 13 1 M Sabadell K:250,000 – 299,999この問合せは、外部表の行の値を表示します。 このデータを頻繁に問い合せる場合は、データを調査した後、
DBMS_CLOUD.COPY_DATAを使用してデータを表にロードできます。
詳細については、「Avro、ORCまたはParquetファイル用のCREATE_EXTERNAL_TABLEプロシージャ」と「Avro、ORCまたはParquetファイル用のCOPY_DATAプロシージャ」を参照してください。
サポートされているクラウド・オブジェクト・ストレージ・サービスの詳細は、「DBMS_CLOUD URIの書式」を参照してください。
ORC、ParquetまたはAvroソース・ファイルを使用して外部データを問い合せ、テキスト列サイズを明示的に設定
Autonomous Databaseの外部表を使用して、オブジェクト・ストアに格納されているORC、ParquetまたはAvroデータにアクセスする場合、テキスト列の最大サイズを自動または明示的に設定できます。
デフォルトでは、テキスト列サイズはMAX_STRING_SIZEの値に基づいて設定されます。
この例のsales_extended.parquetのソース・ファイルには、Parquet形式のデータが含まれます。 Autonomous Databaseでこのファイルを問い合せて、最大テキスト列サイズを設定するには、次の手順を実行します:
- プロシージャ
DBMS_CLOUD.CREATE_CREDENTIALを使用してオブジェクト・ストアにアクセスするため、オブジェクト・ストア資格証明を格納します:BEGINDBMS_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_TABLEを使用して、ソース・ファイルの上にORC、ParquetまたはAvroの外部表を作成し、maxvarcharフォーマット・パラメータを指定します。プロシージャ
DBMS_CLOUD.CREATE_EXTERNAL_TABLEは、サポートされているクラウド・オブジェクト・ストレージ・サービスの外部ファイルをサポート: Oracle Cloud Infrastructure Object Storage、Azure BlobストレージまたはAzure Data Lakeストレージ、Amazon S3およびAmazon S3互換: Oracle Cloud Infrastructure Object Storage、Google Cloud StorageおよびWasabi Hot Cloud Storage。 資格証明は表レベルのプロパティであるため、外部ファイルは同じオブジェクト・ストア上にある必要があります。デフォルトでは、外部表で作成された列のデータ型は、ソース・ファイルで見つかったフィールドのOracleデータ型に自動的にマップされ、外部表の列名はソース・フィールド名と一致します。
BEGINDBMS_CLOUD.CREATE_EXTERNAL_TABLE( table_name =>'sales_extended_ext', credential_name =>'DEF_CRED_NAME', file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet', format => '{"type":"parquet", "schema": "first", "maxvarchar":"extended"}' ); END; /パラメータは次のとおりです:
-
table_name: 外部表名です。 -
credential_name: 前のステップで作成した資格証明の名前です。credential_nameパラメータは、Oracleオブジェクトのネーミング規則に準拠している必要があります。 詳細については、「データベース・オブジェクトのネーミング・ルール」を参照してください。 -
file_uri_list: 問い合せるソース・ファイルのカンマ区切りリストです。 専用エンドポイントの「The URI」形式は、商用(OC1)レルムでサポートされています。 詳細は、「オブジェクト・ストレージ専用エンドポイント」および「DBMS_CLOUD URIの書式」を参照してください。 -
format: ソース・ファイルのフォーマットを記述するオプションを定義します。 Parquetファイルの場合は、formatパラメータを使用してtypeparquetを指定します。 Avroファイルの場合、formatパラメータを使用してtypeavroを指定します。 ORCファイルの場合は、formatパラメータを使用してtypeorcを指定します。値が
extendedのオプションmaxvarcharは、テキスト列が拡張文字列サイズを持つAutonomous Databaseインスタンスでvarchar(32767)として作成されるように指定します。 指定可能な値は、varchar(4000)が指定されたstandard、varchar(32767)が指定されたextendedおよびautoです。 デフォルトのmaxvarchar値はautoです。 この値の場合、最大テキスト・サイズはMAX_STRING_SIZEの値に基づきます。
この例では、
namespace-stringがOracle Cloud Infrastructureオブジェクト・ストレージのネームスペースで、bucketnameがバケット名です。 詳細については、「オブジェクト・ストレージのネームスペースについて」を参照してください。デフォルトでは、
formatschemaパラメータが設定され、列とデータ型が自動的に導出され、ソースのフィールドは名前で外部表の列と一致します。 ソース・データ型は、ORC、ParquetまたはAvroデータ型のDBMS_CLOUDマッピングに従って、外部表の列のOracleデータ型に変換されます。 有効なschemaパラメータ値は次のとおりです:-
first: 指定されたfile_uri_list(firstがschemaのデフォルト値)でDBMS_CLOUDによって検出された最初のORC、ParquetまたはAvroファイルのスキーマを分析します。 -
all:file_uri_listで見つかったORC、ParquetまたはAvroファイルのすべてのスキーマを分析します。 これらはオブジェクト・ストア内で取得されるファイルのみであるため、各ファイルのメタデータが同じであることは保証されません。 たとえば、File1には"address"というフィールドが含まれ、File2ではそのフィールドが欠落している場合があります。 各ファイルを調べて列を導出するほうが、費用がかかりますが、最初のファイルにすべての必須フィールドが含まれていない場合は必須です。
ノート:
column_listパラメータを指定すると、外部表とschema値の列名およびデータ型を指定します(指定した場合は無視されます)。column_listを使用して、外部表の列を制限できます。column_listが指定されていない場合、schemaのデフォルト値はfirstです。 -
- これで、前のステップで作成した外部表に対して問合せを実行できます:
DESC sales_extended_ext; Name Null? Type -------------- ----- -------------- PROD_ID NUMBER(10) CUST_ID NUMBER(10) TIME_ID VARCHAR2(32767) CHANNEL_ID NUMBER(10) PROMO_ID NUMBER(10) QUANTITY_SOLD NUMBER(10) AMOUNT_SOLD NUMBER(10,2) GENDER VARCHAR2(32767) CITY VARCHAR2(32767) STATE_PROVINCE VARCHAR2(32767) INCOME_LEVEL VARCHAR2(32767)SELECT prod_id, quantity_sold, gender, city, income_level FROM sales_extended_ext WHERE ROWNUM < 8; PROD_ID QUANTITY_SOLD GENDER CITY INCOME_LEVEL 1 13 1 M Adelaide K: 250,000 – 299,999 2 13 1 M Dolores L: 300,000 and above 3 13 1 M Cayuga F: 110,000 – 129,999 4 13 1 F Bergen op Zoom C: 50,000 – 69,999 5 13 1 F Neuss J: 190,000 – 249,999 6 13 1 F Darwin F: 110,000 – 129,999 7 13 1 M Sabadell K:250,000 – 299,999この問合せは、外部表の行の値を表示します。 このデータを頻繁に問い合せる場合は、データを調査した後、
DBMS_CLOUD.COPY_DATAを使用してデータを表にロードできます。formatオプションmaxvarcharをstandardとして指定した場合、varchar2()テキスト列はサイズ4000で作成されます。 たとえば:BEGINDBMS_CLOUD.CREATE_EXTERNAL_TABLE( table_name =>'sales_extended_ext', credential_name =>'DEF_CRED_NAME', file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet', format => '{"type":"parquet", "schema": "first", "maxvarchar":"standard"}' ); END; /オプション
maxvarcharを値standardに設定したformatパラメータは、テキスト列をvarchar(4000)として作成することを指定します。DESC sales_extended_ext; Name Null? Type -------------- ----- -------------- PROD_ID NUMBER(10) CUST_ID NUMBER(10) TIME_ID VARCHAR2(4000) CHANNEL_ID NUMBER(10) PROMO_ID NUMBER(10) QUANTITY_SOLD NUMBER(10) AMOUNT_SOLD NUMBER(10,2) GENDER VARCHAR2(4000) CITY VARCHAR2(4000) STATE_PROVINCE VARCHAR2(4000) INCOME_LEVEL VARCHAR2(4000)
詳細については、「Avro、ORCまたはParquetファイル用のCREATE_EXTERNAL_TABLEプロシージャ」と「Avro、ORCまたはParquetファイル用のCOPY_DATAプロシージャ」を参照してください。
サポートされているクラウド・オブジェクト・ストレージ・サービスの詳細は、「DBMS_CLOUD URIの書式」を参照してください。