LOAD

description

  1. Palo 目前支持以下4种导入方式:
  2. 1. Hadoop Load:基于 MR 进行 ETL 的导入。
  3. 2. Broker Load:使用 broker 进行进行数据导入。
  4. 3. Mini Load:通过 http 协议上传文件进行批量数据导入。
  5. 4. Stream Load:通过 http 协议进行流式数据导入。
  6. 5. S3 Load: 通过S3协议直接访问支持S3协议的存储系统进行数据导入, 导入的语法与Broker Load 基本相同。
  7. 本帮助主要描述第一种导入方式,即 Hadoop Load 相关帮助信息。其余导入方式可以使用以下命令查看帮助:
  8. !!!该导入方式可能在后续某个版本即不再支持,建议使用其他导入方式进行数据导入。!!!
  9. 1. help broker load;
  10. 2. help mini load;
  11. 3. help stream load;
  12. Hadoop Load 仅适用于百度内部环境。公有云、私有云以及开源环境无法使用这种导入方式。
  13. 该导入方式必须设置用于 ETL Hadoop 计算队列,设置方式可以通过 help set property 命令查看帮助。

语法:

  1. LOAD LABEL load_label
  2. (
  3. data_desc1[, data_desc2, ...]
  4. )
  5. [opt_properties];
  6. 1. load_label
  7. 当前导入批次的标签。在一个 database 内唯一。
  8. 语法:
  9. [database_name.]your_label
  10. 2. data_desc
  11. 用于描述一批导入数据。
  12. 语法:
  13. DATA INFILE
  14. (
  15. "file_path1"[, file_path2, ...]
  16. )
  17. [NEGATIVE]
  18. INTO TABLE `table_name`
  19. [PARTITION (p1, p2)]
  20. [COLUMNS TERMINATED BY "column_separator"]
  21. [FORMAT AS "file_type"]
  22. [(column_list)]
  23. [COLUMNS FROM PATH AS (columns_from_path)]
  24. [SET (k1 = func(k2))]
  25. 说明:
  26. file_path:
  27. 文件路径,可以指定到一个文件,也可以用 * 通配符指定某个目录下的所有文件。通配符必须匹配到文件,而不能是目录。
  28. PARTITION:
  29. 如果指定此参数,则只会导入指定的分区,导入分区以外的数据会被过滤掉。
  30. 如果不指定,默认导入table的所有分区。
  31. NEGATIVE
  32. 如果指定此参数,则相当于导入一批“负”数据。用于抵消之前导入的同一批数据。
  33. 该参数仅适用于存在 value 列,并且 value 列的聚合类型仅为 SUM 的情况。
  34. column_separator
  35. 用于指定导入文件中的列分隔符。默认为 \t
  36. 如果是不可见字符,则需要加\\x作为前缀,使用十六进制来表示分隔符。
  37. hive文件的分隔符\x01,指定为"\\x01"
  38. file_type
  39. 用于指定导入文件的类型,例如:parquetorccsv。默认值通过文件后缀名判断。
  40. column_list
  41. 用于指定导入文件中的列和 table 中的列的对应关系。
  42. 当需要跳过导入文件中的某一列时,将该列指定为 table 中不存在的列名即可。
  43. 语法:
  44. (col_name1, col_name2, ...)
  45. columns_from_path:
  46. 用于指定需要从文件路径中解析的字段。
  47. 语法:
  48. (col_from_path_name1, col_from_path_name2, ...)
  49. SET:
  50. 如果指定此参数,可以将源文件某一列按照函数进行转化,然后将转化后的结果导入到table中。
  51. 目前支持的函数有:
  52. strftime(fmt, column) 日期转换函数
  53. fmt: 日期格式,形如%Y%m%d%H%M%S (年月日时分秒)
  54. column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。
  55. 如果没有column_list,则按照palo表的列顺序默认输入文件的列。
  56. time_format(output_fmt, input_fmt, column) 日期格式转化
  57. output_fmt: 转化后的日期格式,形如%Y%m%d%H%M%S (年月日时分秒)
  58. input_fmt: 转化前column列的日期格式,形如%Y%m%d%H%M%S (年月日时分秒)
  59. column: column_list中的列,即输入文件中的列。存储内容应为input_fmt格式的日期字符串。
  60. 如果没有column_list,则按照palo表的列顺序默认输入文件的列。
  61. alignment_timestamp(precision, column) 将时间戳对齐到指定精度
  62. precision: year|month|day|hour
  63. column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。
  64. 如果没有column_list,则按照palo表的列顺序默认输入文件的列。
  65. 注意:对齐精度为yearmonth的时候,只支持20050101~20191231范围内的时间戳。
  66. default_value(value) 设置某一列导入的默认值
  67. 不指定则使用建表时列的默认值
  68. md5sum(column1, column2, ...) 将指定的导入列的值求md5sum,返回3216进制字符串
  69. replace_value(old_value[, new_value]) 将导入文件中指定的old_value替换为new_value
  70. new_value如不指定则使用建表时列的默认值
  71. hll_hash(column) 用于将表或数据里面的某一列转化成HLL列的数据结构
  72. 3. opt_properties
  73. 用于指定一些特殊参数。
  74. 语法:
  75. [PROPERTIES ("key"="value", ...)]
  76. 可以指定如下参数:
  77. cluster: 导入所使用的 Hadoop 计算队列。
  78. timeout 指定导入操作的超时时间。默认超时为3天。单位秒。
  79. max_filter_ratio:最大容忍可过滤(数据不规范等原因)的数据比例。默认零容忍。
  80. load_delete_flag:指定该导入是否通过导入key列的方式删除数据,仅适用于UNIQUE KEY
  81. 导入时可不指定value列。默认为false
  82. 5. 导入数据格式样例
  83. 整型类(TINYINT/SMALLINT/INT/BIGINT/LARGEINT):1, 1000, 1234
  84. 浮点类(FLOAT/DOUBLE/DECIMAL):1.1, 0.23, .356
  85. 日期类(DATE/DATETIME):2017-10-03, 2017-06-13 12:34:03
  86. (注:如果是其他日期格式,可以在导入命令中,使用 strftime 或者 time_format 函数进行转换)
  87. 字符串类(CHAR/VARCHAR):"I am a student", "a"
  88. NULL值:\N

example

  1. 1. 导入一批数据,指定超时时间和过滤比例。指定导入队列为 my_cluster
  2. LOAD LABEL example_db.label1
  3. (
  4. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file")
  5. INTO TABLE `my_table`
  6. )
  7. PROPERTIES
  8. (
  9. "cluster" = "my_cluster",
  10. "timeout" = "3600",
  11. "max_filter_ratio" = "0.1"
  12. );
  13. 其中 hdfs_host namenode hosthdfs_port fs.defaultFS 端口(默认9000
  14. 2. 导入一批数据,包含多个文件。导入不同的 table,指定分隔符,指定列对应关系
  15. LOAD LABEL example_db.label2
  16. (
  17. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file1")
  18. INTO TABLE `my_table_1`
  19. COLUMNS TERMINATED BY ","
  20. (k1, k3, k2, v1, v2),
  21. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file2")
  22. INTO TABLE `my_table_2`
  23. COLUMNS TERMINATED BY "\t"
  24. (k1, k2, k3, v2, v1)
  25. );
  26. 3. 导入一批数据,指定hive的默认分隔符\x01,并使用通配符*指定目录下的所有文件
  27. LOAD LABEL example_db.label3
  28. (
  29. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/*")
  30. NEGATIVE
  31. INTO TABLE `my_table`
  32. COLUMNS TERMINATED BY "\\x01"
  33. );
  34. 4. 导入一批“负”数据
  35. LOAD LABEL example_db.label4
  36. (
  37. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/old_file)
  38. NEGATIVE
  39. INTO TABLE `my_table`
  40. COLUMNS TERMINATED BY "\t"
  41. );
  42. 5. 导入一批数据,指定分区
  43. LOAD LABEL example_db.label5
  44. (
  45. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file")
  46. INTO TABLE `my_table`
  47. PARTITION (p1, p2)
  48. COLUMNS TERMINATED BY ","
  49. (k1, k3, k2, v1, v2)
  50. );
  51. 6. 导入一批数据,指定分区, 并对导入文件的列做一些转化,如下:
  52. 表结构为:
  53. k1 datetime
  54. k2 date
  55. k3 bigint
  56. k4 varchar(20)
  57. k5 varchar(64)
  58. k6 int
  59. 假设数据文件只有一行数据,5列,逗号分隔:
  60. 1537002087,2018-08-09 11:12:13,1537002087,-,1
  61. 数据文件中各列,对应导入语句中指定的各列:
  62. tmp_k1, tmp_k2, tmp_k3, k6, v1
  63. 转换如下:
  64. 1) k1:将 tmp_k1 时间戳列转化为 datetime 类型的数据
  65. 2) k2:将 tmp_k2 datetime 类型的数据转化为 date 的数据
  66. 3) k3:将 tmp_k3 时间戳列转化为天级别时间戳
  67. 4) k4:指定导入默认值为1
  68. 5) k5:将 tmp_k1tmp_k2tmp_k3 列计算 md5
  69. 6) k6:将导入文件中的 - 值替换为 10
  70. LOAD LABEL example_db.label6
  71. (
  72. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file")
  73. INTO TABLE `my_table`
  74. PARTITION (p1, p2)
  75. COLUMNS TERMINATED BY ","
  76. (tmp_k1, tmp_k2, tmp_k3, k6, v1)
  77. SET (
  78. k1 = strftime("%Y-%m-%d %H:%M:%S", tmp_k1),
  79. k2 = time_format("%Y-%m-%d %H:%M:%S", "%Y-%m-%d", tmp_k2),
  80. k3 = alignment_timestamp("day", tmp_k3),
  81. k4 = default_value("1"),
  82. k5 = md5sum(tmp_k1, tmp_k2, tmp_k3),
  83. k6 = replace_value("-", "10")
  84. )
  85. );
  86. 7. 导入数据到含有HLL列的表,可以是表中的列或者数据里面的列
  87. LOAD LABEL example_db.label7
  88. (
  89. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file")
  90. INTO TABLE `my_table`
  91. PARTITION (p1, p2)
  92. COLUMNS TERMINATED BY ","
  93. SET (
  94. v1 = hll_hash(k1),
  95. v2 = hll_hash(k2)
  96. )
  97. );

keyword

  1. LOAD