はじめに
本記事は、Autonomous Database(ADB)でParquetファイルをロードするときのメモ
DBMS_CLOUDパッケージを利用する方法などもあるが、ここではGUI(Database Actions)を使った方法について記載。
Parquetファイルを扱うモチベーション
Open Targets Platformのデータ利活用準備(データベースのテーブル化)をシンプルに実現したい
事前準備
リソースプリンシパルの有効化
ADBから任意のクラウドストレージにアクセスするための認可を設定
→ ここでは、OCIのリソースプリンシパルを用いることで、安全にADBからクラウドストレージにアクセス可能とする
参考: Autonomous Databaseでリソースプリンシパルを有効化する
データの準備
Object Storageにデータをロード
ここでは以下の手順でopentargetsのデータをObject Storageにコピーします。
- Wgetを使ってローカル環境にデータを保存
- 保存したデータとObject Storageとをrsyncで同期
Wgetを使ってローカル環境にデータを保存
# Wgetを使ってローカル環境にデータを保存
cd ${work directory}
wget -r \
-np \
-nH \
--cut-dirs=6 \
-R "index.html*" \
ftp://ftp.ebi.ac.uk/pub/databases/opentargets/platform/25.03/output/association_by_datasource_direct/
# 保存したデータとObject Storageとをrsyncで同期
oci os object bulk-upload -ns ${your Name Space} -bn ${your bucket name} --src-dir .
シナリオ1: (簡易アプローチ)Database Actionsの利用
概要
Database Actionsを利用して、GUIでデータをロード
実現ステップ
- Database Actions/Data Studio/Loadの起動
- ロード対象ファイルの選択
- ロード実行
- 確認
(参考)実際に実行されるSQL
CREATE TABLE "PARQUET"."ASSOCIATION_BY_DATASOURCE_DIRECT"
(
"DATATYPEID" VARCHAR2(32767)
,"DATASOURCEID" VARCHAR2(32767)
,"DISEASEID" VARCHAR2(32767)
,"TARGETID" VARCHAR2(32767)
,"SCORE" BINARY_DOUBLE
,"EVIDENCECOUNT" NUMBER(19,0)
);
DECLARE
l_TABLE_NAME DBMS_QUOTED_ID := '"ASSOCIATION_BY_DATASOURCE_DIRECT"';
l_CREDENTIAL_NAME DBMS_QUOTED_ID := '"OCI$RESOURCE_PRINCIPAL"';
l_FILE_URI_LIST CLOB :=
q'[https://objectstorage.ap-tokyo-1.oraclecloud.com/n/orasejapan/b/adb/o/association_by_datasource_direct/*.parquet]';
l_FIELD_LIST CLOB := null;
l_FORMAT CLOB :=
'{
"schema" : "first",
"type" : "parquet",
"logprefix" : "ASSOCIATION_BY_DATASOURCE_DIRECT"
}';
l_SCHEMA_NAME DBMS_QUOTED_ID := '"PARQUET"';
l_OPERATION_ID NUMBER ; /* OUT */
BEGIN
"C##CLOUD$SERVICE"."DBMS_CLOUD"."COPY_DATA"
( TABLE_NAME => l_TABLE_NAME
,CREDENTIAL_NAME => l_CREDENTIAL_NAME
,FILE_URI_LIST => l_FILE_URI_LIST
,FIELD_LIST => l_FIELD_LIST
,FORMAT => l_FORMAT
,SCHEMA_NAME => l_SCHEMA_NAME
,OPERATION_ID => l_OPERATION_ID
);
END;
/
DECLARE
l_ACTIONS CLOB :=
'{
"tableName" : "ASSOCIATION_BY_DATASOURCE_DIRECT",
"postIngestActions" :
[
{
"type" : "columnTrim"
}
]
}';
BEGIN
"C##ADP$SERVICE"."DBMS_INGEST_ACTIONS"."RUN_POST"(l_ACTIONS);
END;
/
ロード実行
- 確認
SQL Developer WEB(Database Actions/SQL)でデータがロードされているかを確認