Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:
Databricks SQL
Databricks Runtime
Define uma tabela externa ou gerenciada, opcionalmente usando uma fonte de dados.
Sintaxe
{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL | { TEMP | TEMPORARY } ] TABLE [ IF NOT EXISTS ] }
table_name
[ table_specification ]
[ USING data_source ]
[ table_clauses ]
[ AS query ] }
table_specification
( { column_identifier column_type [ column_properties ] } [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL |
COLLATE collation_name |
GENERATED ALWAYS AS ( expr ) |
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start | INCREMENT BY step ] [ ...] ) ] |
DEFAULT default_expression |
COMMENT column_comment |
column_constraint |
MASK clause } [ ... ]
table_clauses
{ OPTIONS clause |
PARTITIONED BY clause |
CLUSTER BY clause |
clustered_by_clause |
LOCATION path [ WITH ( CREDENTIAL credential_name ) ] |
COMMENT table_comment |
TBLPROPERTIES clause |
DEFAULT COLLATION default_collation_name |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Antes do Databricks Runtime 16.1 START WITH deve preceder INCREMENT BY.
Parâmetros
MUDAR
Se especificado, substitui a tabela e seu conteúdo, caso já exista. Essa cláusula só tem suporte para tabelas Delta e Apache Iceberg.
REPLACEpreserva o histórico da tabela e privilégios concedidos, filtros de linha e máscaras de coluna.Observação
O Azure Databricks recomenda fortemente usar
REPLACEem vez de descartar e recriar tabelas.EXTERNO
Se especificado, cria uma tabela externa. Ao criar uma tabela externa, você também deve fornecer uma cláusula
LOCATION. Quando uma tabela externa é descartada, os arquivos noLOCATIONnão serão removidos.TEMP ou TEMPORÁRIO
Aplica-se a:
Databricks SQL
Databricks Runtime 17.3 e acimaImportante
Esse recurso está em Visualização Pública.
Se especificado, cria uma tabela temporária que somente a sessão atual pode acessar.
SE NÃO EXISTIR
Se estiver especificado e uma já existir tabela com o mesmo nome, a instrução será ignorada.
IF NOT EXISTSnão pode coexistir comREPLACE, o que significa queCREATE OR REPLACE TABLE IF NOT EXISTSnão é permitido.-
O nome da tabela a ser criada. O nome não deve incluir uma especificação temporal ou uma especificação de opções. Se a tabela for temporária, a tabela
table_namepode ser qualificada porsession, ousystem.session. Caso contrário, se o nome não for qualificado, a tabela será criada no esquema atual.Tabelas criadas em
hive_metastoresó podem conter caracteres alfanuméricos ASCII e sublinhados (INVALID_SCHEMA_OR_RELATION_NAME).Tabelas de iceberg devem ser criadas no Catálogo do Unity. A criação de tabelas Iceberg no
hive_metastorenão é suportada. especificação_da_tabela
Esta cláusula opcional define a lista de colunas e os tipos, as propriedades, as descrições e as restrições de coluna associados.
Se você não definir colunas, o esquema da tabela deverá especificar
AS queryouLOCATION.-
Um nome exclusivo para a coluna.
Os identificadores de coluna de tabelas Delta sem a propriedade de mapeamento de coluna (
'delta.columnMapping.mode' = 'name') não devem conter espaços ou os seguintes caracteres:, ; { } ( ) \n \t =.Os identificadores de coluna de
AVROtabelas devem começar com um sublinhado (_) ou uma letra Unicode (incluindo letras não ASCII) e ser seguidos por uma combinação de letras Unicode, dígitos e sublinhados.Os identificadores de coluna das tabelas
ICEBERGdevem ser exclusivos, não diferenciar maiúsculas de minúsculas e seguir as regras de identificador padrão do SQL. Evite usar espaços ou caracteres especiais, pois eles podem não ter suporte em todos os mecanismos de consulta. -
Especifica o tipo dos dados da coluna. Nem todos os tipos de dados com suporte pelo Azure Databricks têm suporte de todas as fontes de dados.
NOT NULL
Se especificado, a coluna não aceita
NULLvalores. Essa cláusula tem suporte apenas para tabelas Delta e Iceberg.-
Aplica-se ao:
Databricks SQL
Databricks Runtime 16.1 e versões posterioresPara nomear
STRINGcolumn_typeopcionalmente a ordenação a ser aplicada nas operações de comparação e classificação nesta coluna. A ordenação padrão é a tabeladefault_collation_name. GERADO SEMPRE COMO ( expr )
Quando você especifica essa cláusula, o valor dessa coluna é determinado pelo
exprespecificado.A
DEFAULT COLLATIONda tabela deve serUTF8_BINARY.exprpode ser composto por literais, identificadores de coluna dentro da tabela e funções ou operadores determinísticos e internos do SQL, exceto:- Funções de agregação
- Funções de janela analítica
- Classificação de funções de janela
- Funções geradoras com valor de tabela
- Colunas com uma ordenação diferente de
UTF8_BINARY
Além disso,
exprnão deve conter nenhuma subconsulta.GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]
Aplica-se a:
Databricks SQL
Databricks Runtime 10.4 LTS e superiorDefine uma coluna de identidade. Ao gravar na tabela e não fornecer valores para a coluna de identidade, ele será atribuído automaticamente a um valor que seja exclusivo e aumente (ou diminua, se
stepfor negativo) estatisticamente. Essa cláusula só tem suporte para tabelas Delta. Essa cláusula só pode ser usada para colunas com tipo de dados BIGINT.Os valores atribuídos automaticamente começam com
starte são incrementados porstep. Os valores atribuídos são exclusivos, mas não têm garantia de serem contíguos. Ambos os parâmetros são opcionais e o valor padrão é 1.stepnão pode ser0.Se os valores atribuídos automaticamente estiverem além do intervalo do tipo de coluna de identidade, a consulta falhará.
Quando
ALWAYSfor usado, você não pode fornecer seus próprios valores para a coluna de identidade.Não há suporte para as operações a seguir:
-
PARTITIONED BYuma coluna de identidade -
UPDATEuma coluna de identidade
Observação
Declarar uma coluna de identidade em uma tabela desabilita transações simultâneas. Use colunas de identidade apenas em casos onde não são necessárias gravações simultâneas na tabela de destino.
-
DEFAULT expressão padrão
Aplica-se a:
SQL do Databricks
Databricks Runtime 11.3 LTS e superiorDefine um valor
DEFAULTpara a coluna que é usada emINSERT,UPDATEeMERGE ... INSERTquando a coluna não é especificada.Se nenhum padrão for especificado,
DEFAULT NULLserá aplicado em colunas anuláveis.default_expressionpode ser composto de literais e funções incorporadas de SQL ou operadores exceto:- Funções de agregação
- Funções de janela analítica
- Classificação de funções de janela
- Funções geradoras com valor de tabela
Além disso,
default_expressionnão deve conter nenhuma subconsulta.DEFAULThá suporte para as fontesCSV,JSON,PARQUETeORC.COMENTÁRIO column_comment
Um literal de cadeia de caracteres para descrever a coluna.
-
Adiciona uma chave primária ou restrição de chave estrangeira à coluna em uma tabela.
As restrições não têm suporte para as tabelas no catálogo
hive_metastore.Para adicionar uma restrição de verificação a uma tabela, use ALTER TABLE.
-
Aplica-se a:
Databricks SQL
Databricks Runtime 12.2 LTS e superior
Somente para o Catálogo do UnityAdiciona uma função de máscara de coluna para anonimizar dados confidenciais. Todas as consultas provenientes dessa coluna recebem o resultado da avaliação dessa função sobre a coluna no lugar do valor original da coluna. Isso pode ser útil para fins de controle de acesso detalhado, onde a função pode inspecionar a identidade ou as filiações a grupos do usuário que a está invocando para decidir se quer ocultar o valor.
Se você estiver substituindo uma tabela e a nova tabela incluir os mesmos nomes de coluna que o original, todas as máscaras de coluna existentes serão retidas, mesmo que elas não sejam redefinidas explicitamente. Isso evita a perda acidental de políticas de acesso a dados.
-
Adiciona uma chave primária informativa ou restrições de chave estrangeira informativa à tabela.
As restrições de chave não têm suporte para tabelas no catálogo
hive_metastore.Para adicionar uma restrição de verificação a uma tabela, use ALTER TABLE.
-
USANDO fonte_de_dados
data_sourcepode ser um formato de arquivo ou uma fonte de dados JDBC federada.O formato do arquivo deve ser um dos seguintes:
AVROBINARYFILECSVDELTAICEBERGJSONORCPARQUETTEXT
Para qualquer formato de arquivo diferente
DELTAouICEBERG, você também deve especificar umLOCATION, a menos que o catálogo de tabelas sejahive_metastore.As seguintes origens JDBC federadas são suportadas:
POSTGRESQLSQLSERVERMYSQLBIGQUERYNETSUITEORACLEREDSHIFTSNOWFLAKESQLDWSYNAPSESALESFORCESALESFORCE_DATA_CLOUDTERADATAWORKDAY_RAASMONGODB
Ao especificar uma origem JDBC federada, você também deve especificar a
OPTIONScláusula com as informações de conexão necessárias. Consulte Consultar bancos de dados usando JDBC para obter mais informações sobre como consultar origens de dados federadas.Os seguintes formatos de arquivo adicionais a serem usados para a tabela têm suporte no Databricks Runtime:
JDBCLIBSVM- O nome de classe totalmente qualificado de uma implementação de
org.apache.spark.sql.sources.DataSourceRegisterpersonalizada.
Se
USINGfor omitido, o padrão seráDELTA.O seguinte se aplica ao: Databricks Runtime
HIVEtem suporte para criar uma tabela SerDe do Hive no Databricks Runtime. Você pode especificarfile_formaterow_formatespecíficos do Hive usando a cláusulaOPTIONS, que é um mapa de cadeia de caracteres que não diferencia maiúsculas e minúsculas. Osoption_keyssão:FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
tabela_cláusulas
Opcionalmente, especifique o local, o particionamento, o clustering, as opções, os comentários e as propriedades definidas pelo usuário para a nova tabela. Cada subcláusula só pode ser especificada uma vez.
-
Uma cláusula opcional para particionar a tabela por um subconjunto de colunas.
Observação
Para tabelas de Iceberg gerenciadas, o Azure Databricks não dá suporte
PARTITIONED BY. Use o clustering líquido (CLUSTER BY) para otimizar o layout de dados. Para tabelas Delta, se você omitir a definição de tabela, o Azure Databricks colocará colunas de particionamento no final da tabela, mesmo se você listá-las anteriormente na especificação da coluna. -
Aplica-se a:
Databricks SQL
Databricks Runtime 13.3 e superiorUma cláusula opcional para agrupar uma tabela Delta ou Iceberg por um subconjunto de colunas. Consulte Usar clustering líquido para tabelas. Para agrupar outras tabelas, use
clustered_by_clause.Para tabelas Iceberg, você deve desabilitar explicitamente vetores de exclusão e IDs de linha ao usar
CLUSTER BY.Use o agrupamento automático de líquidos com
CLUSTER BY AUTO, e o Databricks escolhe de forma inteligente as chaves de agrupamento para otimizar o desempenho da consulta.Você não pode combinar agrupamento líquido com
PARTITIONED BY. clustered_by_clause
Opcionalmente, agrupe a tabela ou cada partição num número fixo de buckets de hash através de um subconjunto das colunas.
Esta cláusula não tem suporte para tabelas Delta ou Iceberg. Use
CLUSTER BYem seu lugar.CLUSTERIZADO POR
Especifica o conjunto de colunas pelo qual agrupar cada partição ou a tabela se nenhum particionamento for especificado.
-
Um identificador que faz referência a um
column_identifierna tabela. Se você especificar mais de uma coluna, não poderá haver colunas duplicadas. Como um cluster funciona no nível de partição, você não deve nomear uma coluna de partição também como uma coluna de cluster.
-
CLASSIFICADO POR
Mantém opcionalmente uma ordem de classificação para linhas em um bucket.
sort_column
Uma coluna pela qual classificar o bucket. A coluna não deve ser uma coluna de partição. As colunas de classificação devem ser exclusivas.
ASC ou DESC
Opcionalmente, especifica se o
sort_columnestá classificado em ordem crescente (ASC) ou decrescente (DESC). Os valores padrão sãoASC.
INTO num_buckets BUCKETS
Um inteiro literal que especifica o número de buckets nos quais cada partição (ou a tabela caso nenhum particionamento seja especificado) é dividida.
Caminho de LOCATION [ WITH ( CREDENTIAL credential_name ) ]
Um caminho opcional para o diretório onde os dados da tabela estão armazenados, que pode ser um caminho no armazenamento distribuído.
pathprecisa ser um literal de STRING. Se você não especificar nenhum local, a tabela será considerada umamanaged tablee o Azure Databricks criará um local de tabela padrão.A especificação de um local torna a tabela uma tabela externa.
No caso das tabelas que não estão no catálogo
hive_metastore, a tabelapathdeve ser protegida por um local externo, a menos que uma credencial de armazenamento válida seja especificada.Não é possível criar tabelas externas em locais que se sobreponham ao local das tabelas gerenciadas.
Para tabelas Delta, a tabela herda sua configuração do
LOCATIONse os dados já existirem nesse caminho. Como resultado, quaisquer cláusulas especificadasTBLPROPERTIES,table_specificationouPARTITIONED BYdevem corresponder exatamente aos dados existentes no local Delta.Para tabelas iceberg, a cláusula
LOCATIONnão é suportada. Tabelas de Iceberg estrangeiras são registradas automaticamente quando você cria um catálogo estrangeiro e você deve criar tabelas de Iceberg gerenciadas sem especificar um local.-
Configura ou reconfigura uma ou mais opções de tabela definidas pelo usuário.
COMENTÁRIO table_comment
Um literal de cadeia de caracteres para descrever a tabela.
-
Opcionalmente, define uma ou mais propriedades definidas pelo usuário.
COLOCAÇÃO PADRÃO default_collation_name
Aplica-se a:
Databricks SQL
Databricks Runtime 16.3 e superiorDefine a ordenação padrão a ser usada para:
-
STRINGcolunas e campos da tabela - expressão
DEFAULT - O corpo de
CREATE TABLE AS query
CHECKrestrições e expressões de coluna geradas exigem uma ordenação padrão deUTF8_BINARY.Se não for especificado, a ordenação padrão será derivada do esquema no qual a tabela é criada.
-
Cláusula ROW FILTER WITH
Aplica-se a:
Databricks SQL
Databricks Runtime 12.2 LTS e superior
Somente para o Catálogo do UnityAdiciona uma função de filtro de linha à tabela. Todas as consultas subsequentes dessa tabela receberão um subconjunto das linhas em que a função é avaliada como TRUE booliano. Isso pode ser útil para fins de controle de acesso refinado, em que a função pode inspecionar a identidade ou as associações de grupo do usuário que a invocou para decidir se deseja filtrar algumas linhas.
Se você estiver substituindo uma tabela, todos os filtros de linha existentes serão mantidos, mesmo que não estejam explicitamente redefinidos. Isso evita a perda acidental de políticas de acesso a dados.
-
-
Essa cláusula opcional preenche a tabela usando os dados de
query. Ao especificar umquery, você não deve especificar umtable_specificationtambém. O esquema da tabela é derivado da consulta.Observe que o Azure Databricks substitui a fonte de dados subjacente pelos dados da consulta de entrada, para garantir que a tabela criada contenha exatamente os mesmos dados que a consulta de entrada.
Exemplos
-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);
-- Creates a managed Iceberg table
> CREATE TABLE edu.enrollment.student (id INT, name STRING, age INT) USING ICEBERG;
-- Use data from another table
> CREATE TABLE student_copy AS SELECT * FROM student;
-- Creates a CSV table from an external directory
> CREATE TABLE student USING CSV LOCATION '/path/to/csv_files';
-- Specify table comment and properties
> CREATE TABLE student (id INT, name STRING, age INT)
COMMENT 'this is a comment'
TBLPROPERTIES ('foo'='bar');
-- Specify table comment and properties with different clauses order
> CREATE TABLE student (id INT, name STRING, age INT)
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
-- Create partitioned table
> CREATE TABLE student (id INT, name STRING, age INT)
PARTITIONED BY (age);
-- Create a table with a generated column
> CREATE TABLE rectangles(a INT, b INT,
area INT GENERATED ALWAYS AS (a * b));
-- Create a table with a string column with a case-insensitive collation.
> CREATE TABLE names(name STRING COLLATE UNICODE_CI);
-- Create a table with a default collation and override for a specific column.
> CREATE TABLE names(name STRING, first_name STRING, id STRING COLLATE UTF8_BINARY) DEFAULT COLLATION UNICODE_CI;
-- Create an external table connected to Oracle
> CREATE TABLE IF NOT EXISTS ora_tab
USING ORACLE
OPTIONS (
url '<jdbc-url>',
dbtable '<table-name>',
user '<username>',
password '<password>'
);
> SELECT * FROM ora_tab;
> CREATE TEMP TABLE temp_1 (a INT);
> INSERT INTO temp_1 VALUES (1);
> SELECT * FROM temp_1;
1