Aller au contenu principal

Workday Live Data Query

Workday Live Data Query (LDQ) fournit un accès SQL en temps réel aux objets métier principaux de Workday sans ETL ni réplication de données. Workday distribue un driver JDBC LDQ que vous installez sur une connexion JDBC Unity Catalog pour query Workday à partir du compute Databricks. Pour en savoir plus sur les concepts, les conditions requises, les méthodes d'authentification et les limitations qui s'appliquent à chaque connexion JDBC, consultez la page Connexion JDBC.

L'authentification utilise la méthode Static Credential de la connexion JDBC. Le driver LDQ effectue lui-même l'attribution de porteur de jeton JWT Workday, à l'aide des options de driver définies sur la connexion : wd.authn.accessTokenEndpoint, wd.authn.clientId, wd.authn.isu et wd.authn.privateKey. Databricks transmet telles quelles ces options au driver ; Unity Catalog n'effectue donc pas d'échange de jetons OAuth. N'utilisez pas la méthode OAuth Machine-to-Machine pour cette connexion.

remarque

Vérifiez que votre compute répond aux exigences indiquées dans Connexion JDBC avant de commencer. Pour les entrepôts SQL Warehouse Serverless, vous devez également activer la version préliminaire Enable networking for isolated workloads in Serverless SQL Warehouses .

remarque

L'accès est en lecture seule. Selon l’abonnement Workday de votre organisation, vous devrez peut-être effectuer des étapes supplémentaires pour activer Live Data Query pour votre tenant. Consultez la page Get Started with Workday Live Data Query.

Avant de commencer​

Outre les exigences relatives à la connexion JDBC:

Conditions requises pour Workday :

  • Générez la clé privée pour Workday Live Data Query dans le cadre des conditions préalables à Live Data Query.
  • Activez Live Data Query pour votre tenant Workday et configurez un utilisateur d'intégration système (ISU) autorisé à lire les objets que vous souhaitez query. Consultez Set Up Live Data Query ISU Authentication in Workday dans Workday pour connaître la procédure complète. Enregistrer l'API client de l'ISU avec ces paramètres :
    • Type d'octroi Jwt Bearer Grant
    • Une clé publique x509
    • Inclure l’étendue Workday possédée sélectionnée Après l’enregistrement, notez l’ID client et l’endpoint de jeton du client.

Exigences Databricks :

  • Un volume Unity Catalog où vous pouvez upload le driver JAR, et un Secret Scope pour stocker la clé privée. Voir Gestion des secrets.

Étape 1 : Installez le Driver JDBC Workday LDQ​

  1. Téléchargez le Workday Live Data Query JDBC Driver actuel à partir de la page Live Data Query Downloads de Workday.
  2. Upload the Driver JAR vers un volume Unity Catalog, en suivant l'étape 1 de la section Connexion JDBC.

Le driver s’ enregistre automatiquement via son entrée META-INF/services/java.sql.Driver, de sorte que vous ne définissez pas de classe de driver. Le nom de la classe diffère selon la version du driver ; ne le codez donc pas en dur.

Étape 2 : Créer la connexion​

Stockez d’abord la clé privée de l’ISU en tant que secret afin qu’elle ne soit pas exposée sur la connexion. Voir Gestion des secrets. Créez ensuite une connexion JDBC qui pointe vers votre hôte Workday et transporte les options d’authentification du driver LDQ.

Create the connection with SQL. The Catalog Explorer wizard isn't used for this connection: its Additional Options store values as literal strings, so it can't express the secret(...) reference that wd.authn.privateKey requires.

Exécutez la commande suivante dans un notebook ou dans l’éditeur de requêtes Databricks SQL :

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: votre hôte de service de données Workday sur le port 443.
  • wd.authn.*: les entrées de type jeton du porteur JWT du LDQ Driver, qui constituent la seule authentification utilisée par cette connexion. Conservez-les en tant qu'options de connexion statiques afin qu'elles soient masquées aux utilisateurs effectuant des queries. Ne les ajoutez pas à externalOptionsAllowList.
  • wd.authn.accessTokenEndpoint: l’endpoint de jeton affiché pour votre client API enregistré, sous la forme https://<workday-host>/ccx/oauth2/<tenant>/token.
  • wd.authn.privateKey: référencez la clé privée RSA de l'ISU en tant que secret plutôt que de la coller directement.
  • externalOptionsAllowList: les options de source de données Spark que les utilisateurs effectuant des requêtes peuvent configurer. Seules les options de cette liste peuvent être passées au moment de la requête, elle inclut donc fetchSize — les utilisateurs doivent pouvoir baisser cette limite s'ils atteignent la limite mémoire de 400 Mio du driver. Voir les limitations de connexion JDBC.

The generic user and password OPTIONS aren't needed for Workday LDQ — authentication is entirely through wd.authn.*. You can include them for readability, but they're ignored.

Étape 3 : Accorder l’accès et query​

Accordez le privilège USE CONNECTION, puis effectuez une query sur Workday à l'aide de la fonction SQL remote_query ou de la source de données Spark JDBC. The query runs in Workday's SQL dialect, and objects use three-level names (for example, workday_core.public.<table>).

SQL
GRANT USE CONNECTION ON CONNECTION workday_ldq TO `<user-or-group>`;

Découvrez les objets que l'ISU peut lire, ainsi que les colonnes d'un objet, à partir des métadonnées JDBC du driver (system.jdbc.tables, system.jdbc.columns) :

SQL
-- 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';
important

Ne SELECT * pas à partir d'un objet Workday. De nombreux objets incluent des colonnes à valeurs multiples (ARRAY/STRUCT) que le mappage de type JDBC ne peut pas renvoyer, ce qui provoque un échec avec UNRECOGNIZED_SQL_TYPE. Projetez plutôt les colonnes scalaires dont vous avez besoin.

Ensuite, query les colonnes scalaires dont vous avez besoin :

SQL
SELECT * FROM remote_query('workday_ldq',
query => 'SELECT id, workday_id, display_id FROM workday_core.public.supervisory_organization LIMIT 100');

Limitations​

The limitations on JDBC connection apply. In addition, Workday LDQ access is read-only, and Workday enforces its own guardrails. For the current Workday limitations, see Get Started with Workday Live Data Query.

Ressources supplémentaires​