Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
Databricks SQL
Databricks Runtime
Define una tabla externa o administrada, opcionalmente mediante un origen de datos.
Sintaxis
{ { [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 de Databricks Runtime 16.1, START WITH debe preceder a INCREMENT BY.
Parámetros
SUSTITUIR
Si así se especifica, reemplaza la tabla y su contenido si ya existe. Esta cláusula solo se admite para las tablas Delta y Apache Iceberg.
REPLACEconserva el historial de tablas y concede privilegios, filtros de fila y máscaras de columna.Nota
Azure Databricks recomienda encarecidamente usar
REPLACEen lugar de quitar y volver a crear tablas.EXTERNO
Si se especifica, crea una tabla externa. Al crear una tabla externa, también debe proporcionar una cláusula
LOCATION. Cuando se quita una tabla externa, no se quitarán los archivos enLOCATION.TEMP o TEMPORARY
Se aplica a:
Databricks SQL
Databricks Runtime 17.3 y versiones posterioresImportante
Esta característica está en versión preliminar pública.
Si se especifica, crea una tabla temporal a la que solo puede acceder la sesión actual.
SI NO EXISTE
Si se especifica y ya existe una tabla con el mismo nombre, se omite la instrucción.
IF NOT EXISTSno puede coexistir conREPLACE, lo que significa queCREATE OR REPLACE TABLE IF NOT EXISTSno está permitido.-
Nombre de la tabla que se va a crear. El nombre no debe incluir una especificación temporal ni una especificación de opciones . Si la tabla es una tabla
table_nametemporal puede calificarse porsession, osystem.sessionDe lo contrario, si el nombre no está calificado, la tabla se crea en el esquema actual.Las tablas creadas en
hive_metastoresolo pueden contener caracteres ASCII alfanuméricos y caracteres de subrayado (INVALID_SCHEMA_OR_RELATION_NAME).Las tablas de Iceberg deben crearse en el Catálogo de Unity. No se admite la creación de tablas de Iceberg en
hive_metastore. especificación_de_tabla
Esta cláusula opcional define la lista de columnas y sus tipos, propiedades, descripciones y restricciones de columnas.
Si no define columnas en el esquema de la tabla, debe especificar
AS queryoLOCATION.-
Nombre único para la columna.
Los identificadores de columna de las tablas Delta sin propiedad de asignación de columnas (
'delta.columnMapping.mode' = 'name') no deben contener espacios ni los siguientes caracteres:, ; { } ( ) \n \t =.Los identificadores de columna de las tablas
AVROdeben comenzar con un guion bajo (_) o con una letra Unicode (incluidas las letras no ASCII) e ir seguido por una combinación de letras Unicode, dígitos y guiones bajos.Los identificadores de columna de las tablas
ICEBERGdeben ser únicos, insensibles a mayúsculas y seguir las reglas de identificadores SQL estándar. Evite usar espacios o caracteres especiales, ya que es posible que no sean compatibles con todos los motores de consulta. -
Especifica el tipo de datos de la columna. No todos los tipos de datos que admite Azure Databricks son compatibles con todos los orígenes de datos.
NOT NULL
Si se especifica, la columna no acepta
NULLvalores. Esta cláusula solo se admite para las tablas Delta e Iceberg.INTERCALAR collation_name
se aplica a:
Databricks SQL
Databricks Runtime 16.1 y versiones posterioresOpcionalmente, para
STRINGcolumn_type, nombra la intercalación que se aplicará para las operaciones de comparación y ordenación en esta columna. La intercalación predeterminada es la tabladefault_collation_name.GENERADO SIEMPRE COMO ( expr )
Cuando se especifica esta cláusula, el valor de esta columna viene determinado por el parámetro
exprespecificado.El
DEFAULT COLLATIONde la tabla debe serUTF8_BINARY.exprpuede estar compuesto por literales, identificadores de columna dentro de la tabla y funciones u operadores SQL integrados y deterministas, a excepción de lo siguiente:- Funciones de agregación
- Funciones de ventana analítica
- Funciones de ventana de categoría
- Funciones de generador con valores de tabla
- Columnas con una intercalación distinta de
UTF8_BINARY
Además,
exprno deben contener ninguna subconsulta.GENERATED { ALWAYS | DE FORMA PREDETERMINADA } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ] ]
Se aplica a:
Databricks SQL
Databricks Runtime 10.4 LTS y posteriorDefine una columna de identidad. Si escribe en la tabla y no proporciona valores para la columna de identidad, se le asignará automáticamente un valor único y estadísticamente creciente (o decreciente si
stepes negativo). Esta cláusula solo se admite para las tablas Delta. Además, solo se puede usar para columnas con el tipo de datos BIGINT.Los valores asignados automáticamente comienzan por
starty se incrementan enstep. Los valores asignados son únicos, pero no se garantiza que sean contiguos. Ambos parámetros son opcionales, con un valor predeterminado de 1.stepno puede ser0.Si los valores asignados automáticamente están fuera del intervalo del tipo de columna de identidad, se producirá un error en la consulta.
Cuando se usa
ALWAYS, no puede proporcionar sus propios valores para la columna de identidad.No se admiten estas operaciones:
-
PARTITIONED BYuna columna de identidad -
UPDATEuna columna de identidad
Nota
Declarar una columna de identidad en una tabla deshabilita las transacciones simultáneas. Utilice columnas de identidad únicamente en casos en los que no se requieran escrituras simultáneas en la tabla de destino.
-
DEFAULT expresión_predeterminada
Se aplica a:
Databricks SQL
Databricks Runtime 11.3 LTS y posteriorDefine un valor
DEFAULTpara la columna que se usa enINSERT,UPDATEyMERGE ... INSERTcuando no se especifica la columna.Si no se especifica ningún valor predeterminado, se aplicará
DEFAULT NULLa las columnas que admiten un valor NULL.default_expressionpuede estar compuesto de literales y funciones u operadores de SQL integrados, con la excepción de:- Funciones de agregación
- Funciones de ventana analítica
- Funciones de ventana de categoría
- Funciones de generador con valores de tabla
Además,
default_expressionno deben contener ninguna subconsulta.DEFAULTes compatible con los orígenesCSV,JSON,PARQUETyORC.COMENTARIO column_comment
Literal de cadena para describir la columna.
-
Agrega una restricción de clave principal o clave externa a la columna de una tabla.
No se admiten restricciones para las tablas del catálogo
hive_metastore.Para agregar una restricción check a una tabla, use ALTER TABLE.
-
Se aplica a:
Databricks SQL
Databricks Runtime 12.2 LTS y superior
Solo Unity CatalogAgrega una función de máscara de columna para anonimizar datos confidenciales. Todas las consultas posteriores de esa columna reciben el resultado de evaluar esa función sobre la columna en lugar del valor original de la columna. Esto puede ser útil para fines de control de acceso específicos en los que la función puede inspeccionar la identidad o las pertenencias a grupos del usuario que realiza la invocación, para así decidir si expurga el valor.
Si va a reemplazar una tabla y la nueva tabla incluye los mismos nombres de columna que el original, se conservan las máscaras de columna existentes, aunque no se vuelvan a definir explícitamente. Esto evita la pérdida accidental de directivas de acceso a datos.
-
Añade a la tabla una clave informativa primaria, o restricciones de clave informativa externa.
No se admiten restricciones de clave para las tablas del catálogo
hive_metastore.Para agregar una restricción check a una tabla, use ALTER TABLE.
-
USANDO fuente_de_datos
data_sourcepuede ser un formato de archivo o un origen de datos JDBC federado.El formato del archivo debe ser uno de los siguientes:
AVROBINARYFILECSVDELTAICEBERGJSONORCPARQUETTEXT
Para cualquier formato de archivo distinto de
DELTAoICEBERG, también debe especificar unLOCATION, a menos que el catálogo de tablas seahive_metastore.Los orígenes de datos JDBC federados admitidos son los siguientes:
POSTGRESQLSQLSERVERMYSQLBIGQUERYNETSUITEORACLEREDSHIFTSNOWFLAKESQLDWSYNAPSESALESFORCESALESFORCE_DATA_CLOUDTERADATAWORKDAY_RAASMONGODB
Al especificar un origen JDBC federado, también debe especificar la cláusula
OPTIONScon la información de conexión necesaria. Para más información sobre cómo consultar orígenes de datos federados véase Consulta de bases de datos con JDBC.Los siguientes formatos de archivo adicionales que se usarán para la tabla se admiten en Databricks Runtime:
JDBCLIBSVM- El nombre de clase completo de una implementación de
org.apache.spark.sql.sources.DataSourceRegisterpersonalizada.
Si se omite
USING, el valor predeterminado esDELTA.Lo siguiente se aplica a: Databricks Runtime
HIVEse admite para crear una tabla Hive SerDe en Databricks Runtime. Puede especificar elfile_formatyrow_formatespecífico de Hive mediante la cláusulaOPTIONS, que es un mapa de cadenas que no distingue entre mayúsculas y minúsculas.option_keysson:FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
cláusulas_tabla
También puede especificar una ubicación, particiones, clústeres, opciones, comentarios y propiedades definidas por el usuario para la nueva tabla. Cada subcláusula solo se puede especificar una vez.
-
Cláusula opcional para crear particiones de la tabla por un subconjunto de columnas.
Nota
En el caso de las tablas Iceberg administradas, Azure Databricks no admite
PARTITIONED BY. Use la agrupación en clústeres líquidos (CLUSTER BY) para optimizar el diseño de datos en su lugar. En el caso de las tablas Delta, si omite la definición de tabla, Azure Databricks coloca las columnas de partición al final de la tabla, aunque las enumere anteriormente en la especificación de columna. -
Se aplica a:
Databricks SQL
Databricks Runtime 13.3 y versiones posterioresUna cláusula opcional para agrupar una tabla Delta o Iceberg por un subconjunto de columnas. Consulte Uso de clústeres líquidos para tablas. Para agrupar otras tablas, use
clustered_by_clause.En el caso de las tablas de Iceberg, debe deshabilitar explícitamente los vectores de eliminación y los ID de fila al usar
CLUSTER BY.Use la agrupación automática en clústeres líquidos con
CLUSTER BY AUTOy Databricks elige de forma inteligente las claves de agrupación en clústeres para optimizar el rendimiento de las consultas.No se puede combinar la agrupación en clústeres líquidos con
PARTITIONED BY. clustered_by_clause
También puede agrupar la tabla o cada partición en un número fijo de cubos de hash mediante un subconjunto de las columnas.
Esta cláusula no se admite para las tablas Delta o Iceberg. En su lugar, use
CLUSTER BY.AGRUPADO POR
Especifica el conjunto de columnas por el que se agrupa cada partición, o bien la tabla si no se especifica la creación de particiones.
-
Identificador que hace referencia a un
column_identifieren la tabla. Si especifica más de una columna, no debe haber duplicados. Puesto que una agrupación en clústeres funciona en el nivel de partición, no debe nombrar una columna de partición también como columna de clúster.
-
ORDENADO POR
También puede mantener un criterio de ordenación para las filas de un cubo.
sort_column
Columna por la que se debe ordenar el cubo. La columna no debe ser de partición. Las columnas de ordenación deben ser únicas.
ASC o DESC
También puede especificar si el orden que se aplica a
sort_columnes ascendente (ASC) o descendente (DESC). El valor predeterminado esASC.
INTO num_buckets BUCKETS
Literal INTEGER que especifica el número de cubos en los que se divide cada partición (o la tabla si no se especifica la creación de particiones).
RUTA DE ACCESO LOCATION [ WITH ( CREDENTIAL credential_name ) ]
Ruta de acceso opcional al directorio donde se almacenan los datos de tabla, que podría ser una ruta de acceso en el almacenamiento distribuido.
pathdebe ser un literal de CADENA. Si no especifica ninguna ubicación, la tabla se consideramanaged table, y Azure Databricks crea una ubicación de tabla predeterminada.Si se especifica una ubicación, la tabla se convierte en una tabla externa.
En el caso de tablas que no residan en el catálogo
hive_metastore, la tablapathdebe estar protegida por una ubicación externa, a menos que se especifique una credencial de almacenamiento válida.No se pueden crear tablas externas en ubicaciones que se superpongan con la ubicación de las tablas administradas.
En el caso de las tablas Delta, la tabla hereda su configuración de
LOCATIONsi los datos ya existen en esa ruta de acceso. Como resultado, cualquier cláusula especificadaTBLPROPERTIES,table_specificationoPARTITIONED BYdebe coincidir exactamente con los datos existentes en la ubicación Delta.En el caso de las tablas de Iceberg, no se admite la cláusula
LOCATION. Las tablas Iceberg externas se registran automáticamente al crear un catálogo externo, y debe crear tablas de Iceberg administradas sin especificar una ubicación.-
Este parámetro le permite establecer o restablecer una o varias opciones de tabla que defina el usuario.
COMENTARIO table_comment
Literal de cadena para describir la tabla.
-
Este parámetro opcional le permite establecer una o más propiedades que defina el usuario.
INTERCALACIÓN PREDETERMINADA nombre_intercalación_predeterminada
Se aplica a:
Databricks SQL
Databricks Runtime 16.3 y versiones posterioresDefine la intercalación predeterminada que se va a usar para:
-
STRINGcolumnas y campos de la tabla - Expresión
DEFAULT - El cuerpo de
CREATE TABLE AS query
CHECKLas restricciones y expresiones de columna generadas requieren una intercalación predeterminada deUTF8_BINARY.Si no se especifica, la intercalación predeterminada se deriva del esquema en el que se crea la tabla.
-
CláusulaWITH ROW FILTER
Se aplica a:
Databricks SQL
Databricks Runtime 12.2 LTS y superior
Solo Unity CatalogAgrega una función de filtro de fila a la tabla. Todas las consultas posteriores de esa tabla recibirán un subconjunto de las filas donde la función se evalúa como TRUE booleano. Esto puede ser útil para fines de control de acceso específicos en los que la función puede inspeccionar la identidad o las pertenencias a grupos del usuario que realiza la invocación, para así decidir si se filtran ciertas filas.
Si va a reemplazar una tabla, se conservan los filtros de fila existentes, aunque no se vuelvan a definir explícitamente. Esto evita la pérdida accidental de directivas de acceso a datos.
-
AS consulta
Esta cláusula opcional rellena la tabla con los datos de
query. Si especifica un parámetroquery, no debe especificar también un parámetrotable_specification. El esquema de tabla se deriva de la consulta.Tenga presente que Azure Databricks sobrescribe el origen de datos subyacente con los datos de la consulta de entrada para asegurarse de que la tabla que se crea contenga exactamente los mismos datos que la consulta.
Ejemplos
-- 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