# INSERT INTO

Inserta datos en una tabla.

INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...

Puedes especificar una lista de columnas para insertar usando (c1, c2, c3).

Por ejemplo, considera la tabla:

SHOW CREATE insert_table;
CREATE TABLE insert_table
(
    `a` Int8,
    `b` String,
    `c` Int8
)
ENGINE = MergeTree()
ORDER BY a
INSERT INTO insert_table (*) VALUES (1, 'a', 1) ;

# Insertar los resultados de SELECT

Para usar los resultados devueltos por la instrucción select como los valores para la instrucción insert into, usa la siguiente instrucción:

INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

Las columnas se mapean según su posición en la cláusula SELECT. Sin embargo, sus nombres en la expresión SELECT y la tabla para INSERT pueden ser diferentes. Si es necesario, se realiza una conversión de tipos.

Por ejemplo, considera la tabla data con los siguientes datos.

SELECT * FROM data
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 1 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 2 │ a │ 3 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 2 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 3 │
└───┴───┴───┘

Inserta los datos de la tabla data en la tabla insert_table.

INSERT INTO insert_table (*) SELECT
    a,
    b,
    c
FROM data

Visualiza los datos en la tabla insert_table actual

SELECT *
FROM insert_table
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 1 │
│ 1 │ a │ 2 │
│ 1 │ a │ 3 │
│ 2 │ a │ 3 │
└───┴───┴───┘

# Usando la función de tabla s3 con INSERT INTO

MyScale admite la función de tabla s3 (opens new window). Puedes usar la función de tabla s3 para importar/exportar datos desde/hacia servicios de almacenamiento compatibles con Amazon S3.

Sintaxis

s3(path [, NOSIGN | aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])

Argumentos

  • path - URL del bucket con la ruta al archivo. Admite los siguientes comodines en modo de solo lectura: *, ?, {abc,def} y {N..M} donde N, M son números, 'abc', 'def' son cadenas. Para más información, consulta aquí (opens new window).
  • NOSIGN - Si se proporciona esta palabra clave en lugar de las credenciales, todas las solicitudes no se firmarán.
  • format - El formato (opens new window) del archivo.
  • structure - Estructura de la tabla. Formato 'column1_name column1_type, column2_name column2_type, ...'.
  • compression - Parámetro opcional. Valores admitidos: none, gzip/gz, brotli/br, xz/LZMA, zstd/zst. Por defecto, se detectará automáticamente la compresión por la extensión del archivo.

Valor devuelto

Una tabla con la estructura especificada para leer o escribir datos en el archivo especificado.

# Insertar datos desde un archivo S3

A continuación se muestra un ejemplo de importación de datos desde S3 utilizando la función de tabla s3.

Crea una tabla para almacenar los datos.

CREATE TABLE default.myscale_categorical_search
(
    id    UInt32,
    data  Array(Float32),
    CONSTRAINT check_length CHECK length(data) = 128,
    date  Date,
    label Enum8('person' = 1, 'building' = 2, 'animal' = 3)
) ENGINE = MergeTree ORDER BY id

Inserta los datos desde el archivo S3 https://d3lhz231q7ogjd.cloudfront.net/sample-datasets/quick-start/categorical-search.csv (opens new window):

INSERT INTO default.myscale_categorical_search
    SELECT * FROM s3(
        'https://d3lhz231q7ogjd.cloudfront.net/sample-datasets/quick-start/categorical-search.csv',
        'CSVWithNames',
        'id UInt32, data Array(Float32), date Date, label Enum8(''person'' = 1, ''building'' = 2, ''animal'' = 3)'
    )

# Exportar datos a S3 utilizando Insert Into

La función de tabla s3 también se puede utilizar para exportar datos a S3 desde MyScale.

INSERT INTO FUNCTION s3(
    'https://your-s3-bucket.s3.amazonaws.com/categorical-search.parquet',
    'AWS_ACCESS_KEY_ID',
    'AWS_SECRET_ACCESS_KEY',
    'Parquet')
SELECT * FROM default.myscale_categorical_search LIMIT 1000

En el ejemplo anterior, https://your-s3-bucket.s3.amazonaws.com/categorical-search.csv especifica la ruta en el bucket de almacenamiento S3 donde se escribirán los datos. Los parámetros AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY especifican la clave de acceso de AWS y la clave secreta necesarias para acceder al bucket de almacenamiento S3. El parámetro Parquet indica que los datos se escribirán en el bucket de almacenamiento S3 en formato Parquet y contendrán el contenido de todos los campos de las primeras 1000 filas de la tabla default.myscale_categorical_search.

Si se necesita exportar demasiados datos, los datos se pueden dividir y exportar utilizando varias opciones de particionamiento disponibles en MyScale. En el siguiente ejemplo, creamos diez archivos utilizando un módulo de la función rand(). Observa cómo se hace referencia al ID de partición resultante en el nombre del archivo. Esto da como resultado diez archivos con un sufijo numérico, por ejemplo, categorical-search_0.parquet, categorical-search_1.parquet, etc.

INSERT INTO FUNCTION s3(
    'https://your-s3-bucket.s3.amazonaws.com/categorical-search_{_partition_id}.parquet',
    'AWS_ACCESS_KEY_ID',
    'AWS_SECRET_ACCESS_KEY',
    'Parquet')
PARTITION BY rand() % 10
SELECT * FROM default.myscale_categorical_search
Last Updated: Tue May 07 2024 02:28:12 GMT+0000