Utilice Stream Load para cargar datos desde un archivo local o un flujo de datos hacia StarRocks.
Contexto
Stream Load es un método de carga síncrono que utiliza una solicitud HTTP para importar datos desde un archivo local o un flujo de datos hacia StarRocks. Dado que la operación es síncrona, la respuesta HTTP devuelve inmediatamente el resultado de la carga, lo que permite comprobar su éxito. Stream Load admite los formatos CSV y JSON, y cada carga debe ser menor a 10 GB.
Creación de una tarea de carga
Stream Load importa datos mediante HTTP. Este tema muestra cómo enviar una tarea de importación con el comando curl. También puede utilizar otros clientes HTTP.
Sintaxis
curl --location-trusted -u <username>:<password> -XPUT <url>
(
data_desc
)
[opt_properties]
En el encabezado de solicitud
Expect, se recomienda especificar100-continue, es decir,"Expect:100-continue". Esto evita transferencias de datos innecesarias y reduce la sobrecarga de recursos si el servidor rechaza la solicitud de la tarea de importación.En StarRocks, algunas palabras son palabras clave reservadas de SQL y no pueden usarse directamente en las sentencias SQL. Para usar una palabra clave reservada en una sentencia SQL, debe encerrarla entre comillas invertidas (). Para obtener más información sobre las palabras clave, consulte Keywords.
Parámetros
<username>:<password>: El nombre de usuario y la contraseña de su clúster de StarRocks. Este parámetro es obligatorio. Si la cuenta no tiene contraseña, utilice<username>:.PUT: El método de solicitud HTTP. Este método es obligatorio. Stream Load solo admite PUT.-
<url>: La URL de la tabla de destino en StarRocks. Este parámetro es obligatorio. Utilice el siguiente formato:http://<fe_host>:<fe_http_port>/api/<database_name>/<table_name>/_stream_load.Parámetro
Obligatorio
Descripción
<fe_host>Sí
La dirección IP de un FE en el clúster de StarRocks.
<fe_http_port>Sí
El puerto HTTP del FE. Valor predeterminado: 18030.
Puede encontrar el número de puerto buscando el parámetro http_port en la pestaña Configure de la página Services de StarRocks. Además, puede ejecutar el comando
SHOW FRONTENDSpara ver las direcciones IP y los puertos HTTP de los nodos FE.<database_name>Sí
El nombre de la base de datos que contiene la tabla de destino.
<table_name>Sí
El nombre de la tabla de destino en StarRocks.
-
desc: Describe las propiedades del archivo de datos de origen, como el nombre del archivo, el formato, el separador de columnas, el delimitador de filas, la partición de destino y la asignación de columnas a la tabla de StarRocks. El formato es el siguiente.-T <file_path> -H "format: CSV | JSON" -H "column_separator: <column_separator>" -H "row_delimiter: <row_delimiter>" -H "columns: <column1_name>[, <column2_name>, ... ]" -H "partitions: <partition1_name>[, <partition2_name>, ...]" -H "temporary_partitions: <temporary_partition1_name>[, <temporary_partition2_name>, ...]" -H "jsonpaths: [ \"<json_path1>\"[, \"<json_path2>\", ...] ]" -H "strip_outer_array: true | false" -H "json_root: <json_path>" -H "ignore_json_size: true | false" -H "compression: <compression_algorithm> | Content-Encoding: <compression_algorithm>"Los parámetros en
data_descse dividen en tres tipos: parámetros comunes, parámetros para CSV y parámetros para JSON.-
Parámetros comunes
Parámetro
Obligatorio
Descripción
<file_path>Sí
La ruta al archivo de datos de origen. El nombre del archivo puede incluir opcionalmente una extensión.
formatNo
El formato de los datos. Valores válidos:
CSVyJSON. Valor predeterminado:CSV.partitionsNo
Las particiones donde se cargarán los datos. Si no se especifica este parámetro, los datos se cargan en todas las particiones de la tabla.
temporary_partitionsNo
Las particiones temporales donde se cargarán los datos.
columnsNo
Especifica la asignación de columnas entre el archivo de datos de origen y la tabla de StarRocks.
-
Este parámetro no es necesario si las columnas del archivo de datos de origen coinciden con el orden de las columnas en la tabla de destino.
-
Si las columnas del archivo de origen no coinciden con el esquema de la tabla, debe usar este parámetro para definir la asignación. Puede asignar columnas de dos maneras:
-
Ejemplo 1: La tabla tiene las columnas
c1, c2, c3, pero las columnas del archivo de origen están en el ordenc3, c2, c1. Debe especificar-H "columns: c3, c2, c1". -
Ejemplo 2: La tabla tiene tres columnas
c1, c2, c3, y las primeras tres columnas del archivo de origen se asignan a ellas, pero el archivo tiene una cuarta columna innecesaria. En este caso, especifique-H "columns: c1, c2, c3, temp", usando un marcador de posición para la columna adicional. -
Ejemplo 3: La tabla tiene tres columnas
year, month, day, pero el archivo de origen solo tiene una única columna de marca de tiempo en el formato2018-06-01 01:02:03. Puede derivar las columnas de la tabla especificando-H "columns: col, year = year(col), month=month(col), day=day(col)".
-
-
-
Parámetros específicos de CSV
Parámetro
Obligatorio
Descripción
column_separatorNo
El separador de columnas en el archivo de datos de origen. Valor predeterminado:
\t.Para caracteres no imprimibles, anteponga
\xy use un valor hexadecimal. Por ejemplo, para el separador de Hive\x01, especifique-H "column_separator:\x01".row_delimiterNo
El delimitador de filas en el archivo de datos de origen. Valor predeterminado:
\n.ImportanteAl usar
curl, el shell podría interpretar \n como una cadena literal en lugar de un carácter de nueva línea.En Bash, utilice la sintaxis
$'string'para asegurar que las secuencias de escape como\ny\tse interpreten correctamente. Por ejemplo:-H $'row_delimiter:\n'.skip_headerNo
El número de filas de encabezado que se omitirán al inicio del archivo CSV. El valor debe ser un número entero. Valor predeterminado: 0.
Utilice este parámetro para ignorar filas de metadatos, como nombres de columnas o tipos, en el archivo CSV. Por ejemplo, establecer este parámetro en 1 omite la primera fila.
El delimitador de filas utilizado aquí debe coincidir con el especificado en su comando de carga.
whereNo
Una condición para filtrar qué filas se cargarán.
Por ejemplo, para cargar solo las filas donde la columna k1 es igual a 20180601, especifique
-H "where: k1 = 20180601".max_filter_ratioNo
La proporción máxima de filas que pueden descartarse debido a errores de calidad de datos. Valor predeterminado:
0(tolerancia cero).NotaEsto no aplica a las filas filtradas por la condición where.
partitionsNo
Las particiones de destino para la tarea de carga.
Se recomienda especificar este parámetro si puede determinar las particiones de destino. Los datos de otras particiones se descartarán. Por ejemplo, para cargar datos en las particiones p1 y p2, especifique
-H "partitions: p1, p2".timeoutNo
El tiempo de espera para la tarea de carga, en segundos. Valor predeterminado: 600.
El valor debe estar entre 1 y 259200.
strict_modeNo
Habilita o deshabilita el modo estricto para esta tarea de carga. Valores válidos:
-
false(predeterminado): El modo estricto está deshabilitado. -
true: El modo estricto está habilitado. Cuando se habilita, se aplica un filtrado estricto a las conversiones de tipo de columna durante la carga.
timezoneNo
La zona horaria para la tarea de carga. Valor predeterminado:
Asia/Shanghai(UTC+08:00).Este parámetro afecta a todas las funciones relacionadas con la zona horaria utilizadas en la carga.
exec_mem_limitNo
El límite de memoria para la tarea de carga. Valor predeterminado: 2 GB.
-
-
Parámetros específicos de JSON
Parámetro
Obligatorio
Descripción
jsonpathsNo
Especifica los campos que se extraerán de los datos JSON. Esto es necesario solo cuando necesita asignar campos de origen específicos a columnas de la tabla. El valor debe estar en formato JSON.
strip_outer_arrayNo
Especifica si se debe eliminar la estructura de matriz más externa. Valores válidos:
-
false(predeterminado): Conserva la estructura JSON original. Toda la matriz JSON se importa como un único valor.Por ejemplo, para los datos
[{"k1" : 1, "k2" : 2},{"k1" : 3, "k2" : 4}], establecerstrip_outer_arrayenfalseimporta los datos como una sola matriz. -
true: Si los datos que se van a cargar son una matriz JSON, debe establecer
strip_outer_arrayen true.Por ejemplo, para los datos
[{"k1" : 1, "k2" : 2},{"k1" : 3, "k2" : 4}], establecerstrip_outer_arrayentrueimporta los datos como dos filas separadas.
json_rootNo
Especifica el elemento raíz de los datos JSON que se importarán. Este parámetro es necesario solo cuando carga datos JSON haciendo coincidir campos. El valor debe ser una cadena JsonPath válida. Valor predeterminado: vacío, lo que significa que se importa todo el archivo JSON.
ignore_json_sizeNo
Especifica si se debe omitir la comprobación de tamaño para el cuerpo JSON en la solicitud HTTP.
NotaDe forma predeterminada, el tamaño del cuerpo JSON en una solicitud HTTP no puede exceder los 100 MB. Si el tamaño supera este límite, se devuelve un error:
"The size of this batch exceed the max size [104857600] of json type data data [8617627793]. Set ignore_json_size to skip check, although it may lead huge memory consuming."Para cargar archivos más grandes, agregue el encabezado"ignore_json_size:true"a su solicitud para omitir esta comprobación.compression, Content-EncodingNo
El algoritmo de compresión utilizado para el cuerpo de la solicitud. Algoritmos compatibles: GZIP, BZIP2, LZ4_FRAME y ZSTD.
Por ejemplo:
curl --location-trusted -u root: -v 'http://127.0.0.1:18030/api/db0/tbl_simple/_stream_load' \-X PUT -H "expect:100-continue" \-H 'format: json' -H 'compression: lz4_frame' -T ./b.json.lz4. -
-
-
opt_properties: Especifica parámetros opcionales para la importación. Los parámetros especificados se aplican a toda la tarea de importación.El formato es el siguiente:
-H "label: <label_name>" -H "where: <condition1>[, <condition2>, ...]" -H "max_filter_ratio: <num>" -H "timeout: <num>" -H "strict_mode: true | false" -H "timezone: <string>" -H "load_mem_limit: <num>" -H "partial_update: true | false" -H "partial_update_mode: row | column" -H "merge_condition: <column_name>"Parámetro
Obligatorio
Descripción
labelNo
Una etiqueta única para la tarea de carga. StarRocks impide usar la misma etiqueta para más de una tarea exitosa.
Puede usar etiquetas para evitar cargas duplicadas. StarRocks conserva las etiquetas de las tareas exitosas durante 30 minutos.
whereNo
Especifica una condición de filtro. StarRocks aplica este filtro a los datos después de cualquier transformación del parámetro
columns. Solo se importan los datos que satisfacen la cláusulawhere.Por ejemplo, para importar solo las filas donde la columna k1 es 20180601, especifique
-H "where: k1 = 20180601".max_filter_ratioNo
La proporción máxima de filas que pueden descartarse debido a errores de calidad de datos. Valor predeterminado:
0(tolerancia cero).NotaEsto no aplica a las filas filtradas por la condición
where.log_rejected_record_numNo
Especifica el número máximo de filas rechazadas que se registrarán debido a problemas de calidad de datos. Compatible desde la v3.1. Valores válidos:
0,-1o un entero positivo. Valor predeterminado:0.-
0: No se registra ninguna fila rechazada. -
-1: Se registran todas las filas rechazadas. -
Un entero positivo, como
n: Se registra un máximo denfilas rechazadas en cada nodo BE (o CN).
timeoutNo
Tiempo de espera de la tarea de carga en segundos. Valor predeterminado: 600.
El valor debe estar entre 1 y 259200.
strict_modeNo
Especifica si se debe habilitar el modo estricto para esta tarea de carga.
-
false(predeterminado): El modo estricto está deshabilitado. -
true: El modo estricto está habilitado.
timezoneNo
La zona horaria para la tarea de carga. Valor predeterminado:
Asia/Shanghai(UTC+08:00).Este parámetro afecta a todas las funciones relacionadas con la zona horaria utilizadas en la carga.
load_mem_limitNo
El límite de memoria para la tarea de carga. Valor predeterminado: 2 GB.
partial_updateNo
Habilita actualizaciones parciales de columnas. Valores válidos:
trueyfalse. Valor predeterminado:false.partial_update_modeNo
Especifica el modo para actualizaciones parciales. Valores válidos:
rowycolumn.-
row(predeterminado): Modo de fila. Ideal para actualizaciones en tiempo real con muchas columnas en lotes pequeños. -
column: Modo de columna. Ideal para actualizaciones por lotes de pocas columnas en muchas filas. Este modo puede mejorar significativamente el rendimiento.Por ejemplo, si actualiza 10 de 100 columnas (10%) para todas las filas de una tabla, el modo de columna puede mejorar el rendimiento hasta 10 veces.
merge_conditionNo
Especifica el nombre de la columna que se usará como condición de actualización. Una actualización de fila solo ocurre si el valor de los nuevos datos para esta columna es mayor o igual al valor existente.
NotaLa columna especificada no debe formar parte de la clave principal. Esta función solo está disponible para tablas de clave principal.
-
Ejemplo
Este ejemplo carga data.csv en la tabla example_table de la base de datos load_test de un clúster de StarRocks. Para ver un ejemplo completo, consulte Complete data loading example.
curl --location-trusted -u "root:" \
-H "Expect:100-continue" \
-H "label:label2" \
-H "column_separator: ," \
-T data.csv -XPUT \
http://172.17.**.**:18030/api/load_test/example_table/_stream_load
Valor de retorno
Cuando una tarea de carga finaliza, devuelve el resultado en formato JSON. A continuación se muestra un ejemplo.
{
"TxnId": 9,
"Label": "label2",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 4,
"NumberLoadedRows": 4,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 45,
"LoadTimeMs": 235,
"BeginTxnTimeMs": 101,
"StreamLoadPlanTimeMs": 102,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 11,
"CommitAndPublishTimeMs": 19
}
El valor de retorno incluye los siguientes parámetros:
|
Parámetro |
Descripción |
|
|
El ID de transacción de la tarea de carga. |
|
|
La etiqueta de la tarea de carga. |
|
|
El estado de la carga. Los valores válidos son:
|
|
|
Este campo indica el estado de una tarea de importación que corresponde a una etiqueta que ya existe. El campo se muestra solo cuando el
|
|
|
Detalles sobre el estado de la carga. Si una carga falla, este parámetro proporciona el motivo. |
|
|
El número total de filas leídas del flujo de datos. |
|
|
El número de filas cargadas. Este parámetro aplica solo cuando |
|
|
El número de filas filtradas debido a mala calidad de datos. |
|
|
El número de filas filtradas por la condición |
|
|
El tamaño del archivo de origen en bytes. |
|
|
La duración de la tarea de carga, en milisegundos. |
|
|
El tiempo necesario para iniciar la transacción, en milisegundos. |
|
|
El tiempo necesario para generar el plan de ejecución, en milisegundos. |
|
|
El tiempo necesario para leer los datos, en milisegundos. |
|
|
El tiempo necesario para escribir los datos, en milisegundos. |
|
|
Se devuelve solo cuando la carga falla. Puede usar Puede ejecutar el comando Por ejemplo, para descargar la información de filas con errores:
Las filas con errores exportadas se guardan en un archivo local llamado Ajuste la tarea de carga según la información de errores y luego reinténtela. |
Cancelar tarea de carga
No puede cancelar manualmente una tarea de Stream Load. El sistema cancela automáticamente la tarea si se agota el tiempo de espera o si ocurre un error de importación. Utilice la ErrorURL en la respuesta para descargar los detalles del error y solucionar el problema.
Ejemplo de carga de datos
Este ejemplo muestra cómo enviar una tarea de carga utilizando el comando curl.
-
Cree una tabla de destino.
Inicie sesión en el nodo maestro del clúster de StarRocks mediante SSH. Para obtener más información, consulte Log in to a cluster.
-
Ejecute el siguiente comando para conectarse al clúster de StarRocks mediante un cliente MySQL.
mysql -h127.0.0.1 -P 9030 -uroot -
Ejecute los siguientes comandos para crear la base de datos y la tabla.
CREATE DATABASE IF NOT EXISTS load_test; USE load_test; CREATE TABLE IF NOT EXISTS example_table ( id INT, name VARCHAR(50), age INT ) DUPLICATE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 3 PROPERTIES ( "replication_num" = "1" -- Sets the replication number to 1. );Presione
Ctrl+Dpara salir del cliente MySQL.
-
Prepare los datos de prueba.
Datos CSV
Por ejemplo, cree un archivo llamado
data.csvcon el siguiente contenido:id,name,age 1,Alice,25 2,Bob,30 3,Charlie,35Datos JSON
Por ejemplo, cree un archivo llamado
json.datacon el siguiente contenido:{"id":1,"name":"Emily","age":25} {"id":2,"name":"Benjamin","age":35} {"id":3,"name":"Olivia","age":28} {"id":4,"name":"Alexander","age":60} {"id":5,"name":"Ava","age":17} -
Ejecute el siguiente comando para enviar una tarea de carga.
Datos CSV
curl --location-trusted -u "root:" \ -H "Expect:100-continue" \ -H "label:label1" \ -H "column_separator: ," \ -T data.csv -XPUT \ http://172.17.**.**:18030/api/load_test/example_table/_stream_loadDatos JSON
curl --location-trusted -u "root:" \ -H "Expect:100-continue" \ -H "label:label2" \ -H "format:json" \ -T json.data -XPUT \ http://172.17.**.**:18030/api/load_test/example_table/_stream_load
Ejemplos de integración de código
Desarrollo de trabajos de Stream Load en Java. Consulte stream_load para obtener más detalles.
Integración de Stream Load con Spark. Consulte 01_sparkStreaming2StarRocks para obtener más detalles.