Puede utilizar ApsaraDB for ClickHouse para consultar datos en Alibaba Cloud Object Storage Service (OSS) y exportar datos de ClickHouse a OSS.
Requisitos previos
-
Requisitos de OSS:
OSS debe estar activado. Para más detalles, consulte Activate OSS.
El usuario de RAM debe tener permisos de lectura y escritura sobre los objetos de OSS. Para más detalles, consulte Overview of permissions and access control.
-
Requisitos del clúster:
Debe contar con una cuenta de base de datos. Para más detalles, consulte Account Management.
Requisitos previos
-
Cree un bucket de OSS. Para más información, consulte Create buckets in the console.
ImportanteEl bucket de OSS debe encontrarse en la misma región que su clúster de ApsaraDB for ClickHouse.
Este ejemplo utiliza un bucket llamado ck-test-oss.
-
Cargue un objeto en OSS.
Este ejemplo utiliza el objeto test.csv. Cargue este objeto en OSS. Para más información, consulte Upload objects.
Si utiliza su propio objeto, asegúrese de que su formato sea compatible con ApsaraDB for ClickHouse. ApsaraDB for ClickHouse admite todos los formatos excepto Protobuf y CapnProto. Para más información, consulte Formatos de archivo compatibles con ClickHouse.
Consulta de datos de OSS
Método 1: Tabla externa de OSS
Enterprise or Community-compatible (22.8 or later)
-
Inicie sesión en la base de datos.
Inicie sesión en la consola de ApsaraDB for ClickHouse.
En la página Clusters, haga clic en la pestaña Clusters of Community-compatible Edition o Enterprise Edition Clusters y, a continuación, haga clic en el ID del clúster objetivo.
En la página Cluster Information, haga clic en Log On to Database en la esquina superior derecha.
En el cuadro de diálogo Connect to Instance, introduzca la cuenta y la contraseña de la base de datos, y luego haga clic en Log On.
-
Cree una tabla externa de OSS.
Una tabla externa de OSS en ApsaraDB for ClickHouse le permite consultar objetos almacenados en OSS directamente sin importar datos al almacenamiento local, lo que habilita la separación entre almacenamiento y computación.
La sintaxis es la siguiente:
CREATE TABLE <table_name> [ON cluster default] ( 'col_name1' col_type1, 'col_name2' col_type2, ... ) ENGINE = OSS('https://<bucket-name>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');La siguiente tabla describe los parámetros.
Parámetro
Descripción
Ejemplo
table_name
El nombre de la tabla.
oss_test_tb
col_name1,col_name2
Los nombres de las columnas.
user_name
col_type1,col_type2
Los tipos de datos de las columnas.
ImportanteEl esquema de la tabla externa de OSS debe ser consistente con los datos en OSS.
String
bucket-name
El nombre del bucket de OSS.
ck-test-oss
oss-endpoint
El endpoint interno para acceder al bucket de OSS desde una instancia ECS a través de una VPC. Para más información, consulte Regions and endpoints.
ImportanteAsegúrese de que el bucket de OSS y su clúster de ApsaraDB for ClickHouse se encuentren en la misma región.
oss-cn-hangzhou-internal.aliyuncs.com
file-name
El nombre del objeto en el bucket de OSS.
test.csv
access-key-id
El AccessKey ID del usuario de RAM para acceder a los datos de OSS.
yourAccessKeyID
access-key-secret
El AccessKey secret del usuario de RAM para acceder a los datos de OSS.
Puede usar un AccessKey existente o crear uno nuevo. Para más información, consulte Create an AccessKey.
ImportantePara reducir el riesgo de fuga de un AccessKey, el AccessKey secret solo se muestra cuando lo crea y no se puede recuperar posteriormente. Asegúrese de almacenar el AccessKey secret de forma segura.
yourAccessKeySecret
file-format-name
El formato del objeto.
ImportanteEl valor debe ser un formato de archivo compatible con ClickHouse que distinga entre mayúsculas y minúsculas. Para más información, consulte formatos de archivo compatibles con ClickHouse.
CSV
Ejemplo:
CREATE TABLE oss_test_tb ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('http://ck-test-oss.oss-cn-hangzhou-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret','CSV') -
Consulte los datos de OSS.
SELECT * FROM oss_test_tb;Se devuelve el siguiente resultado:
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Community-compatible (21.8 or earlier)
-
Inicie sesión en la base de datos.
Inicie sesión en la consola de ApsaraDB for ClickHouse.
En la página Clusters, haga clic en la pestaña Clusters of Community-compatible Edition y, a continuación, haga clic en el ID del clúster objetivo.
En la página Cluster Information, haga clic en Log On to Database en la esquina superior derecha.
En el cuadro de diálogo Connect to Instance, introduzca la cuenta y la contraseña de la base de datos, y luego haga clic en Log On.
-
Cree una tabla externa de OSS.
La sintaxis es la siguiente:
CREATE TABLE <table_name> [ON cluster default] ( 'col_name1' col_type1, 'col_name2' col_type2, ... ) ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');La siguiente tabla describe los parámetros.
Parámetro
Descripción
Ejemplo
table_name
El nombre de la tabla.
oss_test_tb
col_name1,col_name2
Los nombres de las columnas.
user_name
col_type1,col_type2
Los tipos de datos de las columnas.
ImportanteEl esquema de la tabla externa de OSS debe ser consistente con los datos en OSS.
String
oss-endpoint
El endpoint interno para acceder al bucket de OSS desde una instancia ECS a través de una VPC. Para más información, consulte Regions and endpoints.
ImportanteAsegúrese de que el bucket de OSS y su clúster de ApsaraDB for ClickHouse se encuentren en la misma región.
oss-cn-hangzhou-internal.aliyuncs.com
access-key-id
El AccessKey ID del usuario de RAM para acceder a los datos de OSS.
yourAccessKeyID
access-key-secret
El AccessKey secret del usuario de RAM para acceder a los datos de OSS.
Puede usar un AccessKey existente o crear uno nuevo. Para más información, consulte Create an AccessKey.
ImportantePara reducir el riesgo de fuga de un AccessKey, el AccessKey secret solo se muestra cuando lo crea y no se puede recuperar posteriormente. Asegúrese de almacenar el AccessKey secret de forma segura.
yourAccessKeySecret
oss-file-path
La ruta de almacenamiento del objeto, que generalmente tiene el formato
oss://<bucket-name>/<path-to-file>.NotaEl parámetro
oss-file-pathadmite coincidencias aproximadas con comodines. Para más información, consulte Use wildcards for fuzzy matching of storage paths in OSS.oss://ck-test-oss/test.csv
file-format-name
El formato del objeto.
ImportanteEl valor debe ser un formato de archivo compatible con ClickHouse que distinga entre mayúsculas y minúsculas. Para más información, consulte formatos de archivo compatibles con ClickHouse.
CSV
Ejemplo:
CREATE TABLE oss_test_tb ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV'); -
Consulte los datos de OSS.
SELECT * FROM oss_test_tb;Se devuelve el siguiente resultado:
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Método 2: Función de tabla
Enterprise or Community-compatible (22.8 or later)
-
Inicie sesión en la base de datos.
Inicie sesión en la consola de ApsaraDB for ClickHouse.
En la página Clusters, haga clic en la pestaña Clusters of Community-compatible Edition o Enterprise Edition Clusters y, a continuación, haga clic en el ID del clúster objetivo.
En la página Cluster Information, haga clic en Log On to Database en la esquina superior derecha.
En el cuadro de diálogo Connect to Instance, introduzca la cuenta y la contraseña de la base de datos, y luego haga clic en Log On.
-
Utilice una función de tabla para consultar datos.
La sintaxis es la siguiente:
SELECT * FROM oss('https://<bucket-name>.<oss-endpoint>/<file-name>','<access-key-id>', '<access-key-secret>', '<file-format-name>', '<col_name> <col_type>(,...)');Los parámetros son los mismos que para crear una tabla externa de OSS. Para más detalles, consulte Parameter descriptions.
Ejemplo:
SELECT * FROM oss('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String')Se devuelve el siguiente resultado:
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Community-compatible (21.8 or earlier)
-
Inicie sesión en la base de datos.
Inicie sesión en la consola de ApsaraDB for ClickHouse.
En la página Clusters, haga clic en la pestaña Clusters of Community-compatible Edition y, a continuación, haga clic en el ID del clúster objetivo.
En la página Cluster Information, haga clic en Log On to Database en la esquina superior derecha.
En el cuadro de diálogo Connect to Instance, introduzca la cuenta y la contraseña de la base de datos, y luego haga clic en Log On.
-
Utilice una función de tabla para consultar datos.
La sintaxis es la siguiente:
SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<col_name> <col_type>(,...)');Los parámetros son los mismos que para crear una tabla externa de OSS. Para más detalles, consulte Parameter descriptions.
Ejemplo:
SELECT * FROM oss('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');Se devuelve el siguiente resultado:
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Exportación de datos de ClickHouse o escritura de datos en OSS
Notas de uso
Enterprise Edition or Community-compatible Edition 22.8 or later
Cuando exporta o escribe datos en OSS, debe establecer s3_truncate_on_insert=1 o s3_create_new_file_on_insert=1. Si no se establece ninguno de los parámetros o ambos se establecen en 0, la operación fallará si ya existe un archivo en la ruta de destino.
-
s3_truncate_on_insert=1: ApsaraDB for ClickHouse comprueba si existe un archivo en la ruta de destino.Si existe un archivo, ClickHouse sobrescribe el archivo existente con los nuevos datos.
Este método es adecuado para exportaciones o escrituras con sobrescritura total. Sin embargo, proceda con precaución porque esta operación elimina los datos originales.
-
s3_create_new_file_on_insert=1: ClickHouse comprueba si existe un archivo en la ruta de destino.-
Si existe un archivo, ClickHouse crea un nuevo archivo en el directorio y escribe los datos en él. El nuevo archivo se nombra siguiendo este patrón:
nombre del archivo objetivo + número de secuencia (comenzando en 0 e incrementando de 1 en 1) + nombre del formato de archivo.Por ejemplo, si el archivo objetivo es
test.csv, la primera operación createst0.csvy la segunda operación createst1.csv. Este método es adecuado para exportaciones o escrituras incrementales y evita sobrescribir datos existentes.
-
Community-compatible Edition 21.8 or earlier
Al exportar datos o escribir datos, solo se utiliza un único archivo de OSS. Los nuevos datos sobrescriben el contenido del archivo original. Proceda con precaución.
Paso 1: Iniciar sesión en la base de datos
Inicie sesión en la consola de ApsaraDB for ClickHouse.
En la página Clusters, haga clic en la pestaña Clusters of Community-compatible Edition o Enterprise Edition Clusters y, a continuación, haga clic en el ID del clúster objetivo.
En la esquina superior derecha de la página Cluster Information, haga clic en Log On to Database.
En el cuadro de diálogo Connect to Instance, introduzca la cuenta y la contraseña de la base de datos, y haga clic en Log On.
Paso 2: (Opcional) Preparar datos para exportar
Si necesita preparar datos de muestra para exportar de ApsaraDB for ClickHouse a OSS, siga estos pasos.
Si ya tiene datos para exportar, omita este paso.
-
Cree una tabla según la edición de su clúster.
Este ejemplo crea una tabla en un clúster de Community-compatible Edition con réplica única. Si su clúster es de doble réplica y ejecuta Enterprise Edition o Community-compatible Edition, consulte Create a table.
CREATE TABLE test_tb_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id; -
Inserte datos de muestra.
INSERT INTO test_tb_local VALUES (13, 'tick', 25, 'shanghai', 'http://example.com'); -
(Opcional) Consulte los datos.
Ejecute la siguiente instrucción para comprobar que los datos se insertaron correctamente.
SELECT * FROM test_tb_local;
Paso 3: Crear una tabla externa de OSS
Enterprise Edition or Community-compatible Edition 22.8 or later
La sintaxis es la siguiente:
CREATE TABLE <table_name> [ON cluster default]
(
'col_name1' col_type1,
'col_name2' col_type2,
...
)
ENGINE = OSS('https://<bucket-name>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');
La siguiente tabla describe los parámetros.
|
Parámetro |
Descripción |
Ejemplo |
|
table_name |
El nombre de la tabla. |
oss_test_tb |
|
col_name1,col_name2 |
Los nombres de las columnas. |
user_name |
|
col_type1,col_type2 |
Los tipos de datos de las columnas. Importante
El esquema de la tabla externa de OSS debe ser consistente con los datos en OSS. |
String |
|
bucket-name |
El nombre del bucket de OSS. |
ck-test-oss |
|
oss-endpoint |
El endpoint interno para acceder al bucket de OSS desde una instancia ECS a través de una VPC. Para más información, consulte Regions and endpoints. Importante
Asegúrese de que el bucket de OSS y su clúster de ApsaraDB for ClickHouse se encuentren en la misma región. |
oss-cn-hangzhou-internal.aliyuncs.com |
|
file-name |
El nombre del objeto en el bucket de OSS. |
test.csv |
|
access-key-id |
El AccessKey ID del usuario de RAM para acceder a los datos de OSS. |
yourAccessKeyID |
|
access-key-secret |
El AccessKey secret del usuario de RAM para acceder a los datos de OSS. Puede usar un AccessKey existente o crear uno nuevo. Para más información, consulte Create an AccessKey. Importante
Para reducir el riesgo de fuga de un AccessKey, el AccessKey secret solo se muestra cuando lo crea y no se puede recuperar posteriormente. Asegúrese de almacenar el AccessKey secret de forma segura. |
yourAccessKeySecret |
|
file-format-name |
El formato del objeto. Importante
El valor debe ser un formato de archivo compatible con ClickHouse que distinga entre mayúsculas y minúsculas. Para más información, consulte formatos de archivo compatibles con ClickHouse. |
CSV |
Ejemplo:
CREATE TABLE oss_test_tb ON cluster default
(
id UInt8,
user_name String,
age UInt16,
city String,
access_url String
)
ENGINE = OSS('http://ck-test-oss.oss-cn-hangzhou-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret','CSV')
Community-compatible Edition 21.8 or earlier
La sintaxis es la siguiente:
CREATE TABLE <table_name> [ON cluster default]
(
'col_name1' col_type1,
'col_name2' col_type2,
...
)
ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');
La siguiente tabla describe los parámetros.
|
Parámetro |
Descripción |
Ejemplo |
|
table_name |
El nombre de la tabla. |
oss_test_tb |
|
col_name1,col_name2 |
Los nombres de las columnas. |
user_name |
|
col_type1,col_type2 |
Los tipos de datos de las columnas. Importante
El esquema de la tabla externa de OSS debe coincidir con los datos almacenados en OSS. |
String |
|
oss-endpoint |
El endpoint interno para acceder al bucket de OSS desde una instancia de ECS a través de una VPC. Para obtener más información, consulte Regions and endpoints. Importante
Asegúrese de que el bucket de OSS y su clúster de ApsaraDB for ClickHouse se encuentren en la misma región. |
oss-cn-hangzhou-internal.aliyuncs.com |
|
access-key-id |
El AccessKey ID del usuario de RAM para acceder a los datos de OSS. |
yourAccessKeyID |
|
access-key-secret |
El AccessKey secret del usuario de RAM para acceder a los datos de OSS. Puede utilizar un AccessKey existente o crear uno nuevo. Para obtener más información, consulte Create an AccessKey. Importante
Para reducir el riesgo de fuga de un AccessKey, el AccessKey secret solo se muestra en el momento de su creación y no es posible recuperarlo posteriormente. Asegúrese de guardar el AccessKey secret de forma segura. |
yourAccessKeySecret |
|
oss-file-path |
La ruta de almacenamiento del objeto, que generalmente sigue el formato Nota
El parámetro |
oss://ck-test-oss/test.csv |
|
file-format-name |
El formato del objeto. Importante
El valor debe ser un formato de archivo compatible con ClickHouse y distingue entre mayúsculas y minúsculas. Para obtener más información, consulte formatos de archivo compatibles con ClickHouse. |
CSV |
Ejemplo:
CREATE TABLE oss_test_tb ON cluster default
(
id UInt8,
user_name String,
age UInt16,
city String,
access_url String
)
ENGINE = OSS('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV');
Paso 4: Exportar o escribir datos en OSS
Utilice una instrucción INSERT INTO en la tabla externa de OSS para exportar o escribir datos en OSS. Para obtener detalles sobre la sintaxis, consulte INSERT INTO.
Exportar datos de ClickHouse
Enterprise Edition or Community-compatible Edition 22.8 or later
-
Exportación con sobrescritura total (exporta datos a OSS y sobrescribe los datos existentes).
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 SELECT * FROM test_tb_local; -
Exportación incremental (exporta datos a OSS sin sobrescribir los datos existentes).
INSERT INTO oss_test_tb SETTINGS s3_create_new_file_on_insert = 1 SELECT * FROM test_tb_local;Esta operación crea un nuevo archivo en el bucket de OSS. El nombre del nuevo archivo sigue este patrón:
nombre del archivo de destino + número de secuencia (comienza en 0 y aumenta de 1 en 1) + nombre del formato de archivo.Por ejemplo, si el nombre del archivo de destino que especificó al crear la tabla externa de OSS es
test.csv, el nuevo archivo se llamarátest0.csv. Si ejecuta la operación nuevamente, el nuevo archivo se llamarátest1.csv. Puede utilizar OSS console para consultar el nuevo archivo.
Community-compatible Edition 21.8 or earlier
La exportación de datos de ApsaraDB for ClickHouse a OSS sobrescribe los datos existentes. Proceda con precaución.
INSERT INTO oss_test_tb SELECT * FROM test_tb_local;
Escribir datos
Enterprise Edition or Community-compatible Edition 22.8 or later
-
Escribir nuevos datos en OSS y sobrescribir los datos existentes.
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com'); -
Escribir nuevos datos en OSS sin sobrescribir los datos existentes.
INSERT INTO oss_test_tb SETTINGS s3_create_new_file_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com');Esta operación crea un nuevo archivo en el bucket de OSS. El nombre del nuevo archivo sigue este patrón:
nombre del archivo de destino + número de secuencia (comienza en 0 y aumenta de 1 en 1) + nombre del formato de archivo.Por ejemplo, si el nombre del archivo de destino que especificó al crear la tabla externa de OSS es
test.csv, el nuevo archivo se llamarátest0.csv. Si ejecuta la operación nuevamente, el nuevo archivo se llamarátest1.csv. Puede utilizar OSS console para consultar el nuevo archivo.
Community-compatible Edition 21.8 or earlier
La escritura de datos desde ApsaraDB for ClickHouse hacia OSS sobrescribe los datos existentes. Proceda con precaución.
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com');
Más operaciones: Importar datos de OSS a ClickHouse
Si utiliza OSS como almacenamiento intermedio para la migración de datos, también deberá importar los datos desde OSS hacia el clúster de destino. Para obtener más información, consulte Import data from OSS.