はじめに
Autonomous DatabaseはAWS Glueのデータ・カタログのメタデータと同期することができ、AWS Glueが取得したAmazon S3に格納されたデータに対するテーブルに対して、自動的に外部表を作成することが可能です。
今回は、Autonomous DatabaseからAWS Glueのデータカタログに登録されている表として登録されているS3データにアクセスする手順を検証してみました。
1. AWS Glueのデータ・カタログの設定
今回は検証用にS3バケットに3つのCSVファイルをアップロードし、そちらをemployee_on_s3という名前の表としてAWS Glueに登録しました。
鈴木さん,38,1000000
田中さん,51,2500000
渡辺さん,22,1000000
松本さん,41,3000000
高橋さん,28,1800000
山口さん,33,3300000
2. クレデンシャルの作成
AWS Glueデータ・カタログとS3にアクセス可能なAWS IAMユーザを作成し、そのユーザのアクセス・キーとシークレット・アクセス・キーを使用して、クレデンシャルを作成します。
AWS Glue データ・カタログアクセス用のクレデンシャルとS3アクセス用のクレデンシャルを別々に作成して使用することも可能です。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_CREDENTIAL (
3 credential_name => 'AWS_GLUE_CRED',
4 username => 'XXXXXXXXXXXXXXXXXXXX', -- AWS IAMユーザのアクセス・キー
5 password => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -- AWS IAMユーザのシークレット・アクセス・キー
6 );
7 END;
8* /
PL/SQLプロシージャが正常に完了しました。
SQL>
3. AWS Glueにアクセスするためのクレデンシャルの設定
DBMS_DCAT.SET_DATA_CATALOG_CREDENTIALプロシージャ、DBMS_DCAT.SET_OBJECT_STORE_CREDENTIALプロシージャを使用して、AWS Glueデータ・カタログへのアクセスに使用するクレデンシャル、S3へのにアクセスに使用するクレデンシャルをそれぞれ設定します。
SQL> BEGIN
2 DBMS_DCAT.SET_DATA_CATALOG_CREDENTIAL('AWS_GLUE_CRED');
3 DBMS_DCAT.SET_OBJECT_STORE_CREDENTIAL('AWS_GLUE_CRED');
4 END;
5* /
PL/SQLプロシージャが正常に完了しました。
SQL>
4. AWS Glueへの接続の確立
DBMS_DCAT.SET_DATA_CATALOG_CONNプロシージャを使用して、Autonomous DatabaseからAWS Glueへの接続を確立します。
パラメータregionにはAWS Glue データ・カタログが存在するリージョンのリージョン識別子を指定し、パラメータcatalog_typeにはAWS_GLUEを指定します。
SQL> BEGIN
2 DBMS_DCAT.SET_DATA_CATALOG_CONN(region => 'ap-northeast-1',
3 catalog_type=>'AWS_GLUE');
4 END;
5* /
PL/SQLプロシージャが正常に完了しました。
SQL>
AWS Glue データ・カタログへの接続が確立されると、all_glue_databasesビューで、データ・カタログに登録されているデータベースが確認できます。
SQL> SELECT * FROM all_glue_databases ORDER BY name;
DCAT_CON_ID CATALOG_ID NAME DESCRIPTION LOCATION_URI CREATE_TIME PARAMETERS TARGET_DATABASE
______________ _______________ _________________ ______________ _______________ __________________________________ _____________ __________________
010446572587 mygluedatabase 09-NOV-23 09.48.52.000000000 AM
SQL>
また。AWS Glue データ・カタログへの接続が確立されると、all_glue_tablesビューで、データ・カタログに登録されているテーブルが確認できます。
SQL> SELECT * FROM all_glue_tables ORDER BY database_name, name;
DCAT_CON_ID CATALOG_ID DATABASE_NAME NAME TABLE_TYPE CLASSIFICATION DESCRIPTION OWNER CREATED_BY CREATE_TIME LAST_ANALYZED_TIME LAST_ACCESS_TIME UPDATE_TIME IS_REGISTERED_WITH_LAKE_FORMATION PARAMETERS PARTITION_KEYS RETENTION STORAGE_DESCRIPTOR TARGET_TABLE VERSION_ID VIEW_EXPANDED_TEXT VIEW_ORIGINAL_TEXT
______________ _______________ _________________ _________________ _________________ _________________ ______________ ________ _________________________________ __________________________________ _____________________ ___________________ __________________________________ ____________________________________ ___________________________ _________________ ____________ ___________________________________________________________________________________ _______________________________________________________ _____________ _____________________ _____________________
010446572587 mygluedatabase employee_on_s3 EXTERNAL_TABLE csv arn:aws:iam::XXXXXXXXXXXX:xxxx 09-NOV-23 09.49.08.000000000 AM 09-NOV-23 09.49.08.000000000 AM 0 {"classification":"csv"} [] 0 {"BUCKET_COLUMNS":[],"STORAGE_DESCRIPTOR_COLUMNS":[{"COLUMN_COMMENT":null,"NAME" {"CATALOG_ID":null,"DATABASE_NAME":null,"NAME":null} 0
SQL>
5. AWS Glue データ・カタログとの同期
DBMS_DCAT.RUN_SYNCプロシージャを使用して、AWS Glue データ・カタログに登録されているデータベースとテーブルを同期します。
SQL> EXEC DBMS_DCAT.RUN_SYNC(synced_objects=>'{"database_list":["*"]}');
PL/SQLプロシージャが正常に完了しました。
SQL>
DBMS_DCAT$SYNC_LOGビューを使用して、同期処理のログを確認できます。
SQL> SELECT * FROM DBMS_DCAT$SYNC_LOG;
LOG_TIMESTAMP LOG_LEVEL LOG_DETAILS
__________________________________ ____________ ___________________________________________________________________________________
09-NOV-23 09.22.49.345380000 PM INFO full sync
09-NOV-23 09.22.50.856592000 PM INFO Executing get_table for table employee_on_s3] database: []
09-NOV-23 09.22.50.958420000 PM INFO Computing mappings for entity employee_on_s3
09-NOV-23 09.22.50.964742000 PM INFO Entity employee_on_s3 mapped to table GLUE$MYGLUEDATABASE_MY_S3_BUCKET777.EMPLOY
09-NOV-23 09.22.50.969074000 PM INFO Entity employee_on_s3 attribute empname mapped to EMPNAME VARCHAR2(4000 BYTE)
09-NOV-23 09.22.50.970253000 PM INFO Entity employee_on_s3 attribute age mapped to AGE NUMBER(10)
09-NOV-23 09.22.50.971508000 PM INFO Entity employee_on_s3 attribute salary mapped to SALARY NUMBER(10)
09-NOV-23 09.22.52.426546000 PM INFO Implement: creating table GLUE$MYGLUEDATABASE_MY_S3_BUCKET777.EMPLOYEE_ON_S3
8行が選択されました。
SQL>
AWS Glue データ・カタログ内のemployee_on_s3テーブルに対して、GLUE$MYGLUEDATABASE_MY_S3_BUCKET777.EMPLOYEE_ON_S3という名前の外部表が作成されたことがわかります。
6. AWS Glueのデータカタログを使用したS3データへのアクセス
作成された外部表GLUE$MYGLUEDATABASE_MY_S3_BUCKET777.EMPLOYEE_ON_S3を使用して、S3上のデータにアクセスしてみます。
SQL> SELECT * FROM GLUE$MYGLUEDATABASE_MY_S3_BUCKET777.EMPLOYEE_ON_S3;
EMPNAME AGE SALARY
__________ ______ __________
鈴木さん 38 1000000
田中さん 51 2500000
渡辺さん 22 1000000
松本さん 41 3000000
高橋さん 28 1800000
山口さん 33 3300000
6行が選択されました。
SQL>
Autonomous DatabaseからAWS Glueのデータカタログを使用してS3上のデータにアクセスできることが確認できました。
参考情報
・Query External Data with AWS Glue Data Catalog
・Example: Query with AWS Glue Data Catalog
・DBMS_DCAT Package

