Gostaria de adicionar uma restrição de verificação a uma tabela no azure data warehouse .
Tenho o script abaixo:
alter table [FactTbl_Test] add constraint Ck_Test_id check ([Test_Id] != 'Unknown')
Isso causa o erro abaixo:
Erro de análise na linha: 2, coluna: 74: Sintaxe incorreta perto de 'verificar'.
Editar:
Também parece falhar com o mesmo erro se a restrição for criada dentro da declaração da tabela.
Isso e as restrições em geral não têm suporte no Azure SQL Data Warehouse. Consulte https://learn.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-overview#unsupported-table-features para obter uma lista completa.
Se a restrição não for imposta na origem ou se houver várias origens, você poderá implementar durante o processo ETL ou ELT. Para conjuntos de dados pequenos, o ETL provavelmente funcionaria melhor. Com grandes conjuntos de dados, é provável que você obtenha melhor desempenho via ELT-L. Como em extrair e carregar em uma tabela temporária (o heap é rápido), execute a verificação/limpeza e carregue na tabela final.
A documentação da
CREATE TABLE
sintaxe do Azure SQL Data Warehouse não mencionaCHECK
restrições, nem qualquer outro tipo de restrição, excetoNOT NULL
eDEFAULT
restrições.Presumo que
CHECK
as restrições não são suportadas neste produto.Artigo de conversa simples: Levando o Azure SQL Data Warehouse para um Test-Drive por Robert Sheldon, diz claramente:
Eu recriei este teste usando uma tabela vazia e não encontrei esse erro. Para fins de confirmação, sugiro formatar a declaração como tal:
Informe-nos se encontrar o mesmo erro e certifique-se de que apenas esta instrução seja executada em seu lote.
Embora seja improvável o problema aqui, lembre-se de que se
[FactTbl_Test]
já contiver um[Test_Id]
valor de'Unknown'
, oADD CONSTRAINT
falhará. Você pode usar a opçãoWITH NOCHECK
após o nome da tabela, que criará a restrição sem validá-la em relação aos dados existentes.