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.
Importante
Esta característica se encuentra en su versión beta.
Use la CREATE TABLE ... FLOW instrucción para crear una tabla administrada en una canalización, escrita por uno o varios flujos.
Syntax
CREATE TABLE
table_name
[ table_specification ]
[ table_clauses ]
[ flow_clause ]
table_specification
( { column_identifier column_type [column_properties] } [, ...]
[ CONSTRAINT expectation_name EXPECT (expectation_expr)
[ ON VIOLATION { FAIL UPDATE | DROP ROW } ] ] [, ...] )
table_clauses
{ PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT table_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [ ... ]
flow_clause
FLOW [ IMPORT CHECKPOINT checkpoint_path ] INSERT [ONCE] BY NAME query
Para fanar varios orígenes en una tabla administrada, declare varios flujos que tienen como destino CREATE FLOW (canalizaciones)::
CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query
Parameters
table_name
Nombre de la tabla administrada que se va a crear. Si el nombre no está calificado, la tabla se crea en el esquema de destino de la canalización. El nombre aún no debe pertenecer a una tabla de streaming.
especificación_de_tabla
Opcionalmente, define las columnas, sus tipos, propiedades y descripciones. Si se omite, el esquema se deduce de la consulta de flujo.
CONSTRAINT expectation_name EXPECT (expectation_expr) [ EN CASO DE VIOLACIÓN { FALLAR UPDATE | ELIMINAR FILA } ]
Añade expectativas de calidad de datos a la tabla gestionada. Estas expectativas de calidad de datos pueden rastrearse a lo largo del tiempo y acceder a través del registro de eventos de la canalización. Una
FAIL UPDATEexpectativa hace que se produzca un error en el procesamiento al crear la tabla, así como al actualizar la tabla. UnaDROP ROWexpectativa hace que se quite toda la fila si no se cumple la expectativa. Consulte Administración de la calidad de los datos con las expectativas de canalización.expectation_exprpuede estar compuesto por literales, identificadores de columna dentro de la tabla y funciones u operadores SQL deterministas incorporados excepto:-
Funciones de agregado
- Funciones de ventana analítica
- Funciones de ventana de clasificación
- Funciones generadoras de valores de tabla
Además,
expectation_exprno deben contener ninguna subconsulta .-
Funciones de agregado
PARTICIONADO POR (col [, ...])
Opcionalmente, particiona la tabla por un subconjunto de columnas.
CLUSTER BY cláusula
Opcionalmente, habilita la agrupación en clústeres líquidos en la tabla. No se puede combinar
PARTITIONED BYyCLUSTER BY.RUTA DE UBICACIÓN
Una ubicación de almacenamiento opcional para los datos de la tabla.
COMENTARIO table_comment
Literal
STRINGque describe la tabla.Cláusula TBLPROPERTIES
Opcionalmente, establece una o varias propiedades de tabla definidas por el usuario.
Cláusula WITH ROW FILTER
Agrega una función de filtro de fila a la tabla. Las consultas futuras de esa tabla reciben un subconjunto de las filas para las que la función se evalúa como
TRUE.CONSULTA FLOW INSERT [ONCE] BY NAME
Define un flujo de anexión que inserta el resultado de
queryen la tabla, que coincide con las columnas de resultado en las columnas de tabla por nombre.querypuede hacer referencia a orígenes por lotes o de streaming.ONCEejecuta el flujo una sola vez (por ejemplo, para un reposición) en lugar de en cada actualización. Cada flujo con nombre procesa su entrada exactamente una vez por actualización de canalización, idéntica aFLOW INSERT BY NAMEen una tabla de streaming.PUNTO DE CONTROL DE IMPORTACIÓN checkpoint_path
Un literal con la ruta hacia un punto de control de Streaming Estructurado existente para importar al flujo, de modo que un flujo migrado se reanude desde su último desplazamiento
STRINGcomprometido en lugar de reprocesar el código fuente. Importar un punto de control está en Beta. Consulta Migrar un punto de control de Streaming Estructurado.
Migrar un punto de control de Streaming Estructurado
Importante
Importar un punto de control está en Beta.
Se utiliza IMPORT CHECKPOINT para migrar una carga de trabajo de Streaming Estructurado existente a una tubería sin reprocesar el código fuente. Configura checkpoint_path como la checkpointLocation consulta de Structured Streaming utilizada, que puede ser un almacenamiento en la nube, un volumen de Unity Catalog o una ruta DBFS. En la primera actualización de la canalización, el flujo clona ese punto de control en el almacenamiento gestionado de la canalización. El flujo reanuda entonces desde el último desplazamiento comprometido con su estado (como agregaciones, claves de deduplicación y marcas de agua) intacto. Las actualizaciones posteriores de la tubería utilizan el punto de control clonado del flujo; el punto de control original no se modifica.
Warning
Detiene la consulta original de Structured Streaming antes de ejecutar la pipeline. La consulta original de Structured Streaming puede reutilizarse tras la importación, pero necesitas gestionar su estado de punto de control y asegurarte de que la pipeline y la consulta no escriban en la misma tabla al mismo tiempo, lo que puede producir datos duplicados.
Recrea la consulta de Streaming Estructurado como un flujo de pipeline que continúa escribiendo en la tabla donde escribió la consulta, e importa su punto de control:
-- Use the existing table your Structured Streaming query writes to; CREATE TABLE adopts it.
CREATE TABLE streaming_table
-- Continue from the imported checkpoint instead of reprocessing the source.
FLOW IMPORT CHECKPOINT '/Volumes/my_catalog/my_schema/checkpoints/my_stream'
INSERT BY NAME
-- The same source your original query read from.
SELECT * FROM STREAM(source_table);
El punto de control se importa solo en la primera actualización del pipeline. Las actualizaciones posteriores ignoran IMPORT CHECKPOINT. Una actualización completa no reimporta el punto de control. Parte de un nuevo punto de control vacío y reprocesa la fuente.
Limitaciones
- Las tablas administradas no admiten flujos de cambio CDC.
AUTO CDC INTO(SQL) oapply_changes/apply_changes_from_snapshot(Python) en una tabla administrada se produce un error conMANAGED_TABLE_DOES_NOT_SUPPORT_CDC. Para los objetivos CDC, utiliza unCREATE STREAMING TABLE (pipelines) con un flujo definido por CREATE FLOW (pipelines). - Las tablas administradas no admiten
FLOW ... REPLACE WHERE. SoloFLOW INSERT BY NAMEes compatible. Para recalcular y sobrescribir un subconjunto objetivo de una tabla, crea una tabla de flujo y define unREPLACE WHEREflujo con CREATE FLOW (pipelines). Consulte Procesamiento por lotes con flujos REPLACEWHERE. - Las tablas administradas solo se admiten en canalizaciones con El catálogo de Unity. No se admite el metastore de Hive.
- No se puede reutilizar el nombre de una tabla de streaming existente para una tabla administrada. Quite primero la tabla de streaming o se produzca un error en la instrucción con
CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLE. -
IMPORT CHECKPOINTsolo se soporta enFLOW INSERT BY NAME.
Ejemplos
-- Create a managed table populated by an inline append flow from a streaming table
CREATE TABLE output
FLOW INSERT BY NAME SELECT * FROM STREAM(samples.tpch.orders);
-- Create a managed table that ingests files with schema inference and evolution
CREATE TABLE raw_data
FLOW INSERT BY NAME
SELECT * FROM STREAM read_files('abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/base/path');
-- Create a partitioned managed table from a streaming source
CREATE TABLE events
PARTITIONED BY (bucket)
FLOW INSERT BY NAME
SELECT id, bucket FROM STREAM read_files('abfss://my_path', format => 'json');
-- Create a managed table with liquid clustering
CREATE TABLE orders_clustered
CLUSTER BY (order_date, customer_id)
FLOW INSERT BY NAME
SELECT
o_orderkey AS order_id,
o_custkey AS customer_id,
o_orderdate AS order_date,
o_totalprice AS total_price
FROM STREAM(samples.tpch.orders);
-- Create a managed table with a data quality expectation that drops violating rows
CREATE TABLE valid_events
(CONSTRAINT positive_id EXPECT (id > 0) ON VIOLATION DROP ROW)
FLOW INSERT BY NAME
SELECT id FROM STREAM read_files('s3://bucket/path', format => 'json');