# 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}
dondeN
,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