SYNC
Aplica-se a: Databricks SQL Databricks Runtime apenas Unity Catalog
Use o comando SYNC
para atualizar tables externos no Hive Metastore para tables externos no Unity Catalog. Você também pode usar o SYNC
para atualizar tables geridos pelo Hive, que estão armazenados fora do armazenamento do espaço de trabalho do Databricks (às vezes chamado de raiz DBFS), para tables externos no Unity Catalog. Não é possível usá-lo para atualizar o Hive gerenciado tables armazenado no armazenamento do espaço de trabalho. Para atualizar os tables, utilize o CREATE TABLE CLONE.
Você pode usar SYNC
para criar novos tables no Unity Catalog a partir de tables existentes do Hive Metastore, bem como update o Catalogtables Unity quando os tables de origem no Hive Metastore forem modificados.
O comando SYNC
pode ser executado em um nível schema usando a sintaxe SYNC SCHEMA
ou para um indivíduo table usando a sintaxe SYNC TABLE
.
O comando executa uma operação de gravação (ALTER TABLE
) para cada fonte table que atualiza, adicionando algumas propriedades adicionais de table para efeitos de contabilidade.
No caso do Delta tables, para executar a operação de gravação, o cluster ou o SQL Warehouse que executa o comando deve ter acesso de gravação ao local table.
No Databricks Runtime 12.2 LTS ou superior, esse comportamento pode ser desativado definindo a configuração spark.databricks.sync.command.disableSourceTableWrites
do Spark como true
antes de executar o SYNC
comando. Quando set para true
, SYNC
não adiciona novas propriedades table e, portanto, pode não detetar se o table foi atualizado anteriormente para Unity Catalog.
Nesse caso, ele se baseia exclusivamente no nome table para determinar se o table foi atualizado anteriormente para Unity Catalog.
Se o table de origem tiver sido renomeado desde o último comando SYNC, o usuário precisará renomear manualmente o table de destino antes de executar novamente o comando SYNC quando a configuração estiver true
.
Importante
Quando um comando SYNC
é executado, a operação SET TBLPROPERTIES
adiciona uma propriedade table que indica o destino Unity Catalog referência de table externa. Esta operação calcula um novo instantâneo Delta e adiciona uma nova entrada ao log Delta table, escrevendo no caminho de destino table no armazenamento em nuvem.
Sintaxe
SYNC { SCHEMA target_schema [AS EXTERNAL] FROM source_schema |
TABLE target_table [AS EXTERNAL] FROM source_table }
[SET OWNER principal]
[DRY RUN]
Parameters
SCHEMA
SYNC
todos os tables dentro de um schema.-
Um schema existente no Unity Catalog dentro do qual o usuário está autorizado a criar tables.
-
Um schema existente no
hive_metastore
catalog, pertencente ao utilizador.
-
TABLE
SYNC
um indivíduo table.-
Um table novo ou existente no Unity Catalog em um schema dentro do qual o usuário está autorizado a criar tables. Se o table já existe, ele é substituído para corresponder
source_table
, e o usuário também deve possuir o table. Se o table não existir, ele será criado. -
Uma table existente em
hive_metastore
que o utilizador possui.
-
-
Opcionalmente, set o proprietário do tables que foi atualizado no Unity Catalog para
principal
. O proprietário padrão é o usuário atual. AS EXTERNAL
SYNC
um table ou schema gerenciado pelo Hive que é armazenado fora do armazenamento do espaço de trabalho Databricks (às vezes chamado de raiz DBFS) para tables externos no Unity Catalog. Não é possível usarAS EXTERNAL
para atualizar tables geridos pelo Hive armazenados no espaço de trabalho.DRY RUN
Quando especificado, verifica se o
source_table
ou tables dentro dosource_schema
pode ser atualizado sem realmente criar ou atualizar o destino tables. O comando retornaDRY_RUN_SUCCESS
se um table pode ser atualizado.AS EXTERNAL
Iniciando o Databricks Runtime 13.2 e superior, essa cláusula opcional pode ser adicionada para especificar que os tables gerenciados no metastore hive sejam atualizados como tables externos no Unity Catalog. Quando usado comSYNC SCHEMA
, ele se aplica a todos os tables, incluindo tables gerenciados nosource_schema.
Devoluções
Um relatório com as seguintes columns:
source_schema STRING
O nome da fonte schema. O schema é
NULL
se a origem for uma vista temporária não suportada.source_name STRING NOT NULL
O nome da fonte table.
source_type STRING NOT NULL
O tipo de table:
MANAGED
ouEXTERNAL
target_catalog STRING NOT NULL
O catalog de destino no Unity Catalogwhere o table é sincronizado.
target_schema STRING NOT NULL
O schema de destino no Unity Catalogwhere o table é sincronizado.
target_name STRING NOT NULL
O nome do table no Unity Catalog com o qual o table de origem está sincronizado. Este nome corresponde ao nome de origem table.
status_code STRING NOT NULL
Um código de status para o resultado do comando
SYNC
para o código-fonte table.description STRING
Uma mensagem descritiva sobre o estado do comando sync para a fonte table.
Códigos de status comuns retornados por SYNC
O comando SYNC
fornece um campo status_code
único na saída, para que cada table seja atualizado para o Unity Catalog, representando o status da atualização.
Alguns códigos de status comuns, juntamente com as recomendações para resolvê-los são:
DRY_RUN_SUCCESS
: Corrida a seco bem-sucedida.O table pode ser atualizado para Unity Catalog usando o comando
SYNC
.DBFS_ROOT_LOCATION
: Table localizado na raiz do sistema de arquivos Databricks.O table está localizado no local raiz do sistema de arquivos Databricks. Isso não é suportado no Unity Catalog. Copie os dados table para o local do Unity Catalog usando um comando CREATE TABLE com a opção
DEEP CLONE
.EXTERNAL_TABLE_IN_MANAGED_LOCATION
: O caminho de table externo não pode estar sob armazenamento gerenciado.O caminho fornecido para o table externo está dentro da gestão de armazenamento do Unity Catalog. Se o table precisar estar dentro do armazenamento gerido, atualize o table como table gerido usando um comando CREATE TABLE com a opção de
DEEP CLONE
ou mova o local de table para fora do armazenamento gerido do Unity Catalog.HIVE_SERDE
: O table não é elegível para uma atualização do Hive Metastore para o Unity Catalog. Motivo: Hive SerDe Table.Os tables do Hive SerDe não são suportados pelo Unity Catalog. Altere o tables para o formato Delta e emita o comando
SYNC
para atualizar.INVALID_DATASOURCE_FORMAT
: Formato de fonte de dados não especificado ou não é suportado.Use um dos formatos de fonte de dados suportados: Delta, Parquet, CSV, JSON, ORC, TEXT
LOCATION_OVERLAP
: O caminho de entrada sobrepõe-se a outros elementos externos tables.A localização table sobrepõe-se a outras localizações tablesexternas. Use um local diferente para o table ou remove do tablesexterno sobreposto.
MULTIPLE_EXT_LOCATIONS
: O caminho de entrada contém outros locais externos.Existem mais de um locais externos que são subdiretórios do caminho de table fornecido. Verifique se os locais externos dentro do local table são necessários.
MULTIPLE_TARGET_TABLE
: Já existe um table sincronizado diferente. Só é permitido um alvo table por origem table.O table de origem já foi sincronizado com um destino diferente table anteriormente, o que não é permitido. Para forçar o
SYNC
a um tablediferente, remove a propriedade tableupgraded_to
do table de origem ou remove o table sincronizado anteriormente do Unity Catalog se não for mais necessário.NOT_EXTERNAL
: Table não é elegível para atualização do Hive Metastore para o Unity Catalog. Motivo: Não é um tableexterno.O comando
SYNC
permite apenas a migração de tables externos para o Unity Catalog. Para tablesgerenciado , crie um table gerenciado no Unity Catalog usando um comando CREATE TABLE com a opçãoDEEP CLONE
. Como alternativa, use a cláusulaAS EXTERNAL
com o comandoSYNC
para criar um table externo no Unity Catalog.READ_ONLY_CATALOG
: Os dados dentro de um catalog de compartilhamento Delta são somente leitura e não podem ser modificados ou excluídos.O catalog escolhido é uma partilha delta catalog que é apenas de leitura. Tables dentro de um catalog de leitura apenas não pode ser atualizada usando o comando
SYNC
.SUCCESS
: Table sincronizado com êxito.TABLE_ALREADY_EXISTS
: O alvo table já existe.Uma table com o mesmo nome da table escolhida já existe em Unity Catalog. Renomeie ou remove o table existente no Unity Catalog e execute novamente o comando
SYNC
.TEMP_TABLE_NOT_SUPPORTED
: Não há suporte para tables ou views temporárias.Os tables ou views temporários não podem ser atualizados para o Unity Catalog. Para utilizar os tables temporários ou views, recrie-os no Unity Catalog utilizando o comando SHOW CREATE TABLE no Unity Catalog.
TIMEOUT
: Sync tarefa expirou.A tarefa de comando sync levou mais de 300 segundos para ser concluída. Aumente
spark.databricks.sync.command.task.timeout
para um valor mais alto em segundos. O valor padrão é 300. Se o erro persistir, entre em contato com o suporte.VIEWS_NOT_SUPPORTED
: Views não são suportados.Recrie o views manualmente usando o comando SHOW CREATE TABLE no Unity Catalog.
Exemplos
-- Sync an existing hive metastore table hive_metastore.default.my_tbl to a Unity Catalog
-- table named main.default.my_tbl.
> SYNC TABLE main.default.my_tbl FROM hive_metastore.default.my_tbl;
source_schema source_name source_type target_catalog target_schema target_name status_code description
------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
default my_tbl external main default my_tbl SUCCESS Table main.default.my_tbl synced.
-- Sync an existing managed hive metastore table hive_metastore.default.my_tbl to an external table named main.default.my_tbl in Unity Catalog.
> SYNC TABLE main.default.my_tbl AS EXTERNAL FROM hive_metastore.default.my_tbl;
source_schema source_name source_type target_catalog target_schema target_name status_code description
------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
default my_tbl managed main default my_tbl SUCCESS Table main.default.my_tbl synced.
-- SYNC a table in DRY RUN mode to evaluate the upgradability of the hive metastore table.
> SYNC TABLE main.default.my_tbl FROM hive_metastore.default.my_tbl DRY RUN;
source_schema source_name source_type target_catalog target_schema target_name status_code description
------------- ----------- ----------- -------------- ------------- ----------- --------------- ---------------------------------
default my_tbl external main default my_tbl DRY_RUN_SUCCESS
-- SYNC all the eligible tables in schema hive_metastore.mydb to a Unity Catalog schema main.my_db_uc.
-- The upgraded tables in main.my_db_uc will be owned by alf@melmak.et
> SYNC SCHEMA main.my_db_uc FROM hive_metastore.my_db SET OWNER `alf@melmak.et`;
source_schema source_name source_type target_catalog target_schema target_name status_code description
------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
...
-- DRY RUN mode of SYNC SCHEMA to evaluate all the tables in a schema
-- hive_metastore.mydb for upgrading to Unity Catalog.
> SYNC SCHEMA main.my_db_uc FROM hive_metastore.my_db DRY RUN;
source_schema source_name source_type target_catalog target_schema target_name status_code description
------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
...
-- Sync all tables including managed tables in a schema hive_metastore.mydb
-- as external tables in Unity Catalog.
> SYNC SCHEMA main.my_db_uc AS EXTERNAL FROM hive_metastore.my_db;
source_schema source_name source_type target_catalog target_schema target_name status_code description
------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
...