Workday Liveデータクエリー
Workday Live Data Query(LDQ)は、ETLやデータレプリケーションなしで、WorkdayのコアビジネスオブジェクトへのリアルタイムのSQLアクセスを提供します。Workdayは、DatabricksコンピュートからWorkdayをクエリーするためにUnity CatalogのJDBC接続にインストールするLDQ JDBCドライバーを配布しています。すべてのJDBC接続に適用される概念、要件、認証方法、および制限事項については、JDBC接続を参照してください。
認証には、JDBC接続の Static Credential メソッドが使用されます。LDQ ドライバーは、接続に設定したドライバー オプション(wd.authn.accessTokenEndpoint、wd.authn.clientId、wd.authn.isu、wd.authn.privateKey)を使用して、Workday の JWT ベアラー許可を独自に実行します。Databricks はこれらのオプションをそのままドライバーに渡すため、Unity Catalog では OAuth トークンの交換は行われません。この接続には OAuth Machine-to-Machine メソッドを使用しないでください。
開始する前に、JDBC接続の要件をお使いのコンピュートが満たしていることを確認してください。Serverless SQLウェアハウスの場合、 Enable networking for isolated workloads in Serverless SQL Warehouses プレビューも有効にする必要があります。
アクセス権は読み取り専用です。組織の Workday サブスクリプションによっては、テナントで Live Data クエリー を有効にするために、追加のステップを実行する必要がある場合があります。Get Started with Workday Live Data クエリー を参照してください。
始める前に
JDBC接続の要件に加えて:
Workdayの要件:
- Live Data クエリーの前提条件の一部として、Workday Live Data クエリーのプライベートキーを生成します。
- Workdayテナントに対してライブデータクエリーを有効にし、クエリーを実行するオブジェクトの読み取りが許可されたインテグレーションシステムユーザー(ISU)を設定します。手順の詳細については、Workdayの「Set Up Live Data Query ISU Authentication in Workday」を参照してください。以下の設定でISUのAPIクライアントを登録します:
- Jwt Bearer Grant 許可タイプ
- X509 公開鍵
- Include Workday Owned Scope が選択されていること 登録後、クライアントのクライアント ID とトークン Endpoint を控えておきます。
Databricks の要件:
- ドライバー JAR を upload できる Unity Catalog ボリュームと、秘密鍵を保持する Secret Scope。シークレット管理を参照してください。
ステップ 1: Workday LDQ の JDBC ドライバーをインストールする
- WorkdayのLive Data クエリー Downloadsから、現在のWorkday Live Data クエリー JDBCドライバーをdownloadします。
- JDBC 接続のステップ 1 に従って、ドライバーの JAR を Unity Catalog ボリュームに upload します。
ドライバーはMETA-INF/services/java.sql.Driverのエントリを通じて自動登録されるため、ドライバー クラスを設定する必要はありません。クラス名はドライバーのバージョンによって異なるため、ハードコーディングしないでください。
ステップ 2: 接続を作成する
接続時に露出しないように、まず ISU の秘密鍵をシークレットとして保存します。シークレット管理を参照してください。次に、Workday ホストを指し、LDQ ドライバーの認証オプションを持つ JDBC 接続を作成します。
SQL を使用して接続を作成します。この接続ではカタログエクスプローラーのウィザードは使用されません。その 追加オプション には値がリテラル文字列として保存されるため、secret(...) が必要とするwd.authn.privateKey 参照を表現できません。
ノートブックまたは Databricks SQL クエリーエディタで次のコマンドを実行します。
CREATE CONNECTION workday_ldq TYPE JDBC
ENVIRONMENT (
java_dependencies '["/Volumes/<catalog>/<schema>/<volume>/<workday-ldq-driver>.jar"]'
)
OPTIONS (
url 'jdbc:workday://<workday-data-service-host>:443',
`wd.authn.accessTokenEndpoint` 'https://<workday-host>/ccx/oauth2/<tenant>/token',
`wd.authn.clientId` '<client-id>',
`wd.authn.isu` '<isu-name>',
`wd.authn.privateKey` secret('<secret-scope>','<secret-key>'),
externalOptionsAllowList 'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions,fetchSize'
);
url: ポート 443 での Workday データサービス ホスト。wd.authn.*:LDQ ドライバーの JWT ベアラー許可入力。この接続で使用される認証はこれのみです。クエリを実行しているユーザーには非表示になるように、静的接続オプションとして維持します。externalOptionsAllowListに追加しないでください。wd.authn.accessTokenEndpoint登録済みのAPIクライアントに表示されるトークン Endpoint(形式:https://<workday-host>/ccx/oauth2/<tenant>/token)。wd.authn.privateKeyISUのRSA秘密鍵をインラインで貼り付けるのではなく、シークレットとして参照してください。externalOptionsAllowList: クエリーユーザーが設定できるSparkデータソースオプション。クエリー時に渡すことができるのはこのリスト内のオプションのみであるため、fetchSizeが含まれます。ユーザーは、ドライバーの400 MiBメモリ制限に達した場合にこの値を下げることができなければなりません。詳細は、JDBC接続の制限事項を参照してください。
Workday LDQ では汎用の user および password オプションは不要です。認証は完全に wd.authn.* を介して行われます。読みやすさを考慮してこれらを含めることもできますが、無視されます。
ステップ 3: アクセスの付与とクエリーの実行
USE CONNECTION 権限を付与し、remote_query SQL関数または Spark の JDBC データソースを使用して Workday にクエリーを実行します。query は Workday の SQL 方言で実行され、オブジェクトは 3 階層の名前を使用します(例:workday_core.public.<table>)。
GRANT USE CONNECTION ON CONNECTION workday_ldq TO `<user-or-group>`;
ドライバーのJDBCメタデータ (system.jdbc.tables, system.jdbc.columns) から、ISUが読み取ることができるオブジェクトおよびオブジェクトの列を確認します。
-- Objects the ISU is authorized to read
SELECT * FROM remote_query('workday_ldq', query => 'SELECT * FROM system.jdbc.tables');
-- Columns of one object (filter the returned results in Databricks)
SELECT * FROM remote_query('workday_ldq', query => 'SELECT * FROM system.jdbc.columns')
WHERE table_schem = 'public' AND table_name = 'supervisory_organization';
Workday オブジェクトから SELECT * しないでください。多くのオブジェクトには、JDBC 型マッピングが返すことができない複数値 (ARRAY/STRUCT) の列が含まれており、UNRECOGNIZED_SQL_TYPE で失敗します。代わりに、必要なスカラー列をプロジェクションします。
次に、必要なスカラー列に対してクエリーを実行します。
- SQL
- Python
SELECT * FROM remote_query('workday_ldq',
query => 'SELECT id, workday_id, display_id FROM workday_core.public.supervisory_organization LIMIT 100');
df = (
spark.read.format('jdbc')
.option('databricks.connection', 'workday_ldq')
.option('query', 'SELECT id, workday_id, display_id FROM workday_core.public.supervisory_organization LIMIT 100')
.load()
)
df.display()
制限事項
JDBC 接続に関する制限事項が適用されます。さらに、Workday LDQ へのアクセスは読み取り専用であり、Workday は独自のガードレールを適用します。Workday の現在の制限事項については、Workday Live Data クエリー の開始をご覧ください。
その他のリソース
remote_query関数を使用します- JDBC 接続の詳細はこちら
- シークレットを管理する