Ejemplo
Crear una tabla
Parámetros del motor
path— URL del bucket con la ruta al archivo. Admite los siguientes comodines en modoreadonly:*,**,?,{abc,def}y{N..M}, dondeNyMson números, y'abc'y'def'son cadenas. Para obtener más información, consulte a continuación.NOSIGN- Si esta palabra clave se proporciona en lugar de las credenciales, ninguna de las solicitudes se firmará.format— El formato del archivo.aws_access_key_id,aws_secret_access_key- Credenciales de larga duración para el usuario de la cuenta de AWS. Puede usarlas para autenticar sus solicitudes. El parámetro es opcional. Si no se especifican credenciales, se usarán las del archivo de configuración. Para obtener más información, consulte Using S3 for Data Storage.compression— Tipo de compresión. Valores admitidos:none,gzip/gz,brotli/br,xz/LZMA,zstd/zst. El parámetro es opcional. De forma predeterminada, la compresión se detecta automáticamente según la extensión del archivo.partition_strategy– Opciones:WILDCARDoHIVE.WILDCARDrequiere un{_partition_id}en la ruta, que se sustituye por la clave de partición.HIVEno permite comodines, asume que la ruta es la raíz de la tabla y genera directorios particionados al estilo de Hive con IDs de Snowflake como nombres de archivo y el formato de archivo como extensión. El valor predeterminado esWILDCARDpartition_columns_in_data_file- Solo se usa con la estrategia de particiónHIVE. Indica a ClickHouse si debe esperar que las columnas de partición se escriban en el archivo de datos. El valor predeterminado esfalse.storage_class_name- Opciones:STANDARDoINTELLIGENT_TIERING; permite especificar AWS S3 Intelligent Tiering.extra_credentials- Opcional. Se usa para pasar unrole_arnpara el acceso basado en roles en ClickHouse Cloud. Consulte Secure S3 para ver los pasos de configuración.
Caché de datos
S3 admite el almacenamiento en caché de datos en el disco local.
Consulte las opciones de configuración de la caché del sistema de archivos y su uso en esta sección.
El almacenamiento en caché se realiza según la ruta y el ETag del objeto de almacenamiento, por lo que ClickHouse no leerá una versión desactualizada de la caché.
Para habilitar el almacenamiento en caché, utilice la configuración filesystem_cache_name = '<name>' y enable_filesystem_cache = 1.
- añada la siguiente sección al archivo de configuración de ClickHouse:
- reutilizar la configuración de la caché (y, por lo tanto, el almacenamiento en caché) de la sección
storage_configurationde ClickHouse, descrita aquí
PARTITION BY
PARTITION BY — Opcional. En la mayoría de los casos no necesita una clave de partición y, si la necesita, por lo general no debe ser más granular que por mes. La partición no acelera las consultas (a diferencia de la expresión ORDER BY). Nunca debe usar una partición demasiado granular. No particione sus datos por identificadores o nombres de clientes (en su lugar, haga que el identificador o el nombre del cliente sea la primera columna de la expresión ORDER BY).
Para particionar por mes, use la expresión toYYYYMM(date_column), donde date_column es una columna con una fecha del tipo Date. Aquí, los nombres de las particiones tienen el formato "YYYYMM".
Estrategia de partición
WILDCARD (predeterminada): reemplaza el comodín {_partition_id} en la ruta del archivo por la clave de partición real. No se admite la lectura.
HIVE implementa el particionado de estilo Hive para lecturas y escrituras. La lectura se realiza mediante un patrón glob recursivo; equivale a SELECT * FROM s3('table_root/**.parquet').
La escritura genera archivos con el siguiente formato: <prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>.
Nota: al usar la estrategia de partición HIVE, la configuración use_hive_partitioning no tiene efecto.
Ejemplo de la estrategia de partición HIVE:
Consulta de datos particionados
ENGINE usa el token de parámetro {_partition_id} como parte del objeto de S3 (nombre de archivo), y que las consultas SELECT se hacen sobre los nombres de objeto resultantes (por ejemplo, test_3.csv).
Como se muestra en el ejemplo, por el momento no se admite directamente consultar tablas de S3
particionadas, pero puede hacerse consultando las particiones individuales
mediante la función de tabla S3.El principal caso de uso de escribir
datos particionados en S3 es facilitar la transferencia de esos datos a otro
sistema ClickHouse (por ejemplo, migrar de sistemas on-prem a ClickHouse
Cloud). Dado que los datasets de ClickHouse suelen ser muy grandes y que la
fiabilidad de la red no siempre es perfecta, tiene sentido transferir los datasets
en subconjuntos; de ahí la escritura particionada.
Crear la tabla
Insertar datos
Seleccionar desde la partición 3
Seleccionar desde la partición 1
Seleccionar desde la partición 45
Limitación
Select * from p, pero, como se indicó antes, esta consulta fallará; usa la consulta anterior.
Insertar datos
s3_truncate_on_insert y s3_create_new_file_on_insert. Consulte más detalles aquí.
Columnas virtuales
_path— Ruta del archivo. Tipo:LowCardinality(String)._file— Nombre del archivo. Tipo:LowCardinality(String)._size— Tamaño del archivo en bytes. Tipo:Nullable(UInt64). Si se desconoce el tamaño, el valor esNULL._time— Hora de la última modificación del archivo. Tipo:Nullable(DateTime). Si se desconoce la hora, el valor esNULL._etag— ETag del archivo. Tipo:LowCardinality(String). Si se desconoce el etag, el valor esNULL._tags— Etiquetas del archivo. Tipo:Map(String, String). Si no hay etiquetas, el valor es un mapa vacío `’.
Detalles de implementación
- Las lecturas y escrituras pueden ejecutarse en paralelo
- No se admiten:
- Las operaciones
ALTERySELECT...SAMPLE. - Índices.
- La replicación zero-copy es posible, pero no se admite.
- Las operaciones
La replicación zero-copy no está lista para producciónLa replicación zero-copy está deshabilitada de forma predeterminada en ClickHouse versión 22.8 y posteriores. Esta funcionalidad no se recomienda para su uso en producción.
Comodines en path
path puede especificar varios archivos mediante comodines similares a los de bash. Para que un archivo se procese, debe existir y coincidir con el patrón completo de path. La lista de archivos se determina durante SELECT (no en el momento de CREATE).
*— Sustituye cualquier cantidad de caracteres, excepto/, incluida la cadena vacía.**— Sustituye cualquier cantidad de caracteres, incluido/, incluida la cadena vacía.?— Sustituye cualquier carácter individual.{some_string,another_string,yet_another_one}— Sustituye cualquiera de las cadenas'some_string', 'another_string', 'yet_another_one'.{N..M}— Sustituye cualquier número en el rango de N a M, incluidos ambos extremos. N y M pueden tener ceros a la izquierda; por ejemplo,000..078.
{} son similares a la table function remote.
Si la lista de archivos contiene rangos numéricos con ceros a la izquierda, use la construcción con llaves para cada dígito por separado o use
?.file-000.csv, file-001.csv, … , file-999.csv:
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_1.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_2.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_3.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_1.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_2.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_3.csv'
- Especifique el intervalo de sufijos de los archivos:
- Tome todos los archivos con el prefijo
some_file_(no debe haber archivos adicionales con ese prefijo en ninguna de las dos carpetas):
- Tome todos los archivos de ambas carpetas (todos los archivos deben ajustarse al formato y al esquema descritos en la consulta):
Configuración de almacenamiento
- s3_truncate_on_insert - permite truncar el archivo antes de insertar en él. Deshabilitado de forma predeterminada.
- s3_create_new_file_on_insert - permite crear un archivo nuevo en cada inserción si el formato tiene sufijo. Deshabilitado de forma predeterminada.
- s3_skip_empty_files - permite omitir archivos vacíos durante la lectura. Habilitado de forma predeterminada.
Configuración relacionada con S3
s3_max_single_part_upload_size— El tamaño máximo del objeto que se puede cargar en S3 mediante una carga de una sola parte. El valor predeterminado es32Mb.s3_min_upload_part_size— El tamaño mínimo de la parte que se va a cargar durante una carga multiparte en S3 Multipart upload. El valor predeterminado es16Mb.s3_max_redirects— Número máximo de saltos de redirección de S3 permitidos. El valor predeterminado es10.s3_single_read_retries— El número máximo de reintentos durante una lectura individual. El valor predeterminado es4.s3_max_put_rps— Tasa máxima de solicitudes PUT por segundo antes de aplicar limitación. El valor predeterminado es0(ilimitado).s3_max_put_burst— Número máximo de solicitudes que pueden emitirse simultáneamente antes de alcanzar el límite de solicitudes por segundo. De forma predeterminada (valor0), es igual as3_max_put_rps.s3_max_get_rps— Tasa máxima de solicitudes GET por segundo antes de aplicar limitación. El valor predeterminado es0(ilimitado).s3_max_get_burst— Número máximo de solicitudes que pueden emitirse simultáneamente antes de alcanzar el límite de solicitudes por segundo. De forma predeterminada (valor0), es igual as3_max_get_rps.s3_upload_part_size_multiply_factor- Multiplicas3_min_upload_part_sizepor este factor cada vez que se hayan cargados3_multiply_parts_count_thresholdpartes en una sola escritura en S3. El valor predeterminado es2.s3_upload_part_size_multiply_parts_count_threshold- Cada vez que se cargue este número de partes en S3,s3_min_upload_part_sizese multiplica pors3_upload_part_size_multiply_factor. El valor predeterminado es500.s3_max_inflight_parts_for_one_file- Limita la cantidad de solicitudes PUT que pueden ejecutarse de forma concurrente para un objeto. Este número debe limitarse. El valor0significa ilimitado. El valor predeterminado es20. Cada parte en curso tiene un búfer de tamaños3_min_upload_part_sizepara las primerass3_upload_part_size_multiply_factorpartes, y uno mayor cuando el archivo es lo suficientemente grande; consulteupload_part_size_multiply_factor. Con la configuración predeterminada, un archivo cargado consume como máximo320Mbsi el archivo es menor de8G. El consumo es mayor para archivos más grandes.
s3_max_redirects debe establecerse en cero para evitar ataques SSRF; como alternativa, debe especificarse remote_host_filter en la configuración del servidor.
Configuración basada en endpoints
endpoint— Especifica el prefijo de un endpoint. Obligatorio.access_key_idysecret_access_key— Especifican las credenciales que se usarán con el endpoint indicado. Opcional.use_environment_credentials— Si se establece entrue, el cliente de S3 intentará obtener las credenciales de las variables de entorno y de los metadatos de Amazon EC2 para el endpoint indicado. Opcional; el valor predeterminado esfalse.region— Especifica el nombre de la región de S3. Opcional.use_insecure_imds_request— Si se establece entrue, el cliente de S3 usará una solicitud IMDS no segura al obtener credenciales de los metadatos de Amazon EC2. Opcional; el valor predeterminado esfalse.expiration_window_seconds— Período de gracia para comprobar si las credenciales con vencimiento ya han caducado. Opcional; el valor predeterminado es120.no_sign_request- Ignora todas las credenciales para que las solicitudes no se firmen. Es útil para acceder a buckets públicos.header— Añade la cabecera HTTP especificada a una solicitud para el endpoint indicado. Opcional; puede especificarse varias veces.access_header- Añade la cabecera HTTP especificada a una solicitud para el endpoint indicado cuando no hay otras credenciales procedentes de otra fuente.server_side_encryption_customer_key_base64— Si se especifica, se establecerán las cabeceras necesarias para acceder a objetos S3 con cifrado SSE-C. Opcional.server_side_encryption_kms_key_id- Si se especifica, se establecerán las cabeceras necesarias para acceder a objetos S3 con cifrado SSE-KMS. Si se especifica una cadena vacía, se usará la clave de S3 administrada por AWS. Opcional.server_side_encryption_kms_encryption_context- Si se especifica junto conserver_side_encryption_kms_key_id, se establecerá la cabecera del contexto de cifrado indicado para SSE-KMS. Opcional.server_side_encryption_kms_bucket_key_enabled- Si se especifica junto conserver_side_encryption_kms_key_id, se establecerá la cabecera para habilitar las claves de bucket de S3 para SSE-KMS. Opcional; puede sertrueofalse; de forma predeterminada no se establece nada (coincide con la configuración a nivel de bucket).max_single_read_retries— Número máximo de intentos durante una sola lectura. El valor predeterminado es4. Opcional.max_put_rps,max_put_burst,max_get_rpsymax_get_burst- Configuraciones de limitación de velocidad (consulte la descripción anterior) que se usarán para un endpoint específico en lugar de por consulta. Opcional.
Trabajar con archivos comprimidos
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip'
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip'
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip'
ClickHouse admite tres formatos de archivo:
ZIP
TAR
7Z
Aunque se puede acceder a los archivos ZIP y TAR desde cualquier ubicación de almacenamiento compatible, los archivos 7Z solo pueden leerse desde el sistema de archivos local donde está instalado ClickHouse.
Acceso a buckets públicos
403.
Este problema puede evitarse usando la palabra clave NOSIGN, que obliga al cliente a ignorar todas las credenciales y a no firmar las solicitudes.
Optimización del rendimiento
Acceso basado en roles
roleARN mediante el parámetro extra_credentials: