Workday Live Data Query
O Workday Live Data Query (LDQ) fornece acesso SQL em tempo real aos objetos de negócios principais do Workday sem ETL ou replicação de dados. O Workday distribui um driver JDBC LDQ que você instala em uma conexão JDBC do Unity Catalog para fazer query no Workday a partir do compute do Databricks. Para ver os conceitos, os requisitos, os métodos de autenticação e as limitações que se aplicam a todas as conexões JDBC, consulte Conexão JDBC.
A autenticação usa o método Static Credential da URL de conexão JDBC. O driver LDQ executa a concessão de portador JWT do Workday por conta própria, usando as opções de driver definidas na conexão: wd.authn.accessTokenEndpoint, wd.authn.clientId, wd.authn.isu e wd.authn.privateKey. O Databricks passa essas opções para o driver exatamente como estão, portanto, o Unity Catalog não realiza uma troca de token OAuth. Não use o método OAuth Machine-to-Machine para esta conexão.
Confirme se o seu compute atende aos requisitos em Conexão JDBC antes de começar. Para SQL warehouses serverless, você também deve habilitar a visualização Habilitar rede para cargas de trabalho isoladas em SQL warehouses serverless .
Access is read-only. Depending on your organization's Workday subscription, you might need to take additional os passos to enable Live Data Query for your tenant. See Get Started with Workday Live Data Query.
Antes de começar
Além dos requisitos de conexão JDBC:
Requisitos do Workday:
- Gerar a private key para o Workday Live Data Query como parte dos pré-requisitos do Live Data Query.
- Ative o Live Data Query para o seu tenant do Workday e configure um usuário do sistema de integração (ISU) autorizado a ler os objetos que você deseja consultar. Consulte Set Up Live Data Query ISU Authentication in Workday no Workday para obter o procedimento completo. Registre o cliente da API do ISU com estas configurações:
- Tipo de concessão Jwt Bearer Grant
- Uma chave pública x509
- Incluir Escopo de Propriedade da Workday selecionado Após o registro, anote o ID do cliente e o endpoint do token.
Requisitos do Databricks:
- Um volume do Unity Catalog onde você pode fazer o upload do JAR do driver e um secret scope para reter a chave privada. Consulte Secret management.
O passo 1: Instalar o driver JDBC Workday LDQ
- Faça o download do current Workday Live Data Query JDBC driver de Workday's Live Data Query Downloads.
- Faça o upload do JAR do driver para um volume do Unity Catalog seguindo o passo 1 de Conexão JDBC.
O driver se auto-registra por meio de sua entrada META-INF/services/java.sql.Driver, portanto, você não define uma classe de driver. O nome da classe difere de acordo com a versão do driver; portanto, não o codifique rigidamente (hardcode).
Passo 2: Criar a conexão
Armazene a chave privada da ISU como um segredo primeiro para que ela não fique exposta na conexão. Consulte Gerenciamento de segredos. Em seguida, crie uma conexão JDBC que aponte para o host do Workday e contenha as opções de autenticação do driver LDQ.
Crie a conexão com SQL. O assistente do Catalog Explorer não é usado para esta conexão: suas Additional Options armazenam valores como strings literais, portanto, ele não pode expressar a referência secret(...) que wd.authn.privateKey requer.
Execute o seguinte comando em um notebook ou no editor de consultas do 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: o host do seu Workday Data Service na porta 443.wd.authn.*: as entradas de concessão baseadas em JWT do driver LDQ e a única autenticação que essa conexão usa. Mantenha-as como opções de conexão estáticas para que fiquem ocultas dos usuários que executam queries. Não os adicione aexternalOptionsAllowList.wd.authn.accessTokenEndpoint: o token endpoint mostrado para o seu cliente da API registrado, no formatohttps://<workday-host>/ccx/oauth2/<tenant>/token.wd.authn.privateKey: faça referência à chave privada RSA da ISU como um secret em vez de colá-la embutida.externalOptionsAllowList: as opções de fonte de dados do Spark que os usuários que executam queries podem definir. Apenas as opções nesta lista podem ser passadas no momento da execução da query, portanto, ela incluifetchSize— os usuários devem poder reduzi-lo se atingirem o limite de memória de 400 MiB do driver. Consulte Limitações de conexão JDBC.
As OPÇÕES genéricas user e password não são necessárias para o Workday LDQ — a autenticação é feita inteiramente por meio de wd.authn.*. Você pode incluí-los para facilitar a leitura, mas eles serão ignorados.
Step 3: Grant access and query
Conceda o privilégio USE CONNECTION e, em seguida, consulte o Workday com a função SQL remote_query ou a fonte de dados Spark JDBC. O query é executado no dialeto SQL do Workday, e os objetos usam nomes de três níveis (por exemplo, workday_core.public.<table>).
GRANT USE CONNECTION ON CONNECTION workday_ldq TO `<user-or-group>`;
Descubra quais objetos a ISU pode ler, bem como as colunas de um objeto, a partir dos metadados JDBC do driver (system.jdbc.tables, system.jdbc.columns):
-- 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';
Don't SELECT * from a Workday object. Many objects include multi-valued (ARRAY/STRUCT) columns that the JDBC type mapping can't return, which fails with UNRECOGNIZED_SQL_TYPE. Project the scalar columns you need instead.
Em seguida, faça uma query nas colunas escalares de que você precisa:
- 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()
Limitações
As limitações em conexão JDBC se aplicam. Além disso, o acesso ao Workday LDQ é somente leitura e o Workday impõe suas próprias diretrizes de segurança. Para obter as limitações atuais do Workday, consulte Começar a usar a query de dados ao vivo do Workday.
Outros recursos
- Use a função
remote_query - Saiba mais sobre a conexão JDBC
- gerenciar secrets