LOAD
description
1. Palo 目前支持以下4种导入方式:
3. 1. Hadoop Load:基于 MR 进行 ETL 的导入。
4. 2. Broker Load:使用 broker 进行进行数据导入。
5. 3. Mini Load:通过 http 协议上传文件进行批量数据导入。
6. 4. Stream Load:通过 http 协议进行流式数据导入。
7. 5. S3 Load: 通过S3协议直接访问支持S3协议的存储系统进行数据导入, 导入的语法与Broker Load 基本相同。
9. 本帮助主要描述第一种导入方式,即 Hadoop Load 相关帮助信息。其余导入方式可以使用以下命令查看帮助:
11. !!!该导入方式可能在后续某个版本即不再支持,建议使用其他导入方式进行数据导入。!!!
13. 1. help broker load;
14. 2. help mini load;
15. 3. help stream load;
17. Hadoop Load 仅适用于百度内部环境。公有云、私有云以及开源环境无法使用这种导入方式。
18. 该导入方式必须设置用于 ETL 的 Hadoop 计算队列,设置方式可以通过 help set property 命令查看帮助。
语法:
1. LOAD LABEL load_label
2. (
3. data_desc1[, data_desc2, ...]
4. )
5. [opt_properties];
7. 1. load_label
9. 当前导入批次的标签。在一个 database 内唯一。
10. 语法:
11. [database_name.]your_label
13. 2. data_desc
15. 用于描述一批导入数据。
16. 语法:
17. DATA INFILE
18. (
19. "file_path1"[, file_path2, ...]
20. )
21. [NEGATIVE]
22. INTO TABLE `table_name`
23. [PARTITION (p1, p2)]
24. [COLUMNS TERMINATED BY "column_separator"]
25. [FORMAT AS "file_type"]
26. [(column_list)]
27. [COLUMNS FROM PATH AS (columns_from_path)]
28. [SET (k1 = func(k2))]
30. 说明:
31. file_path:
33. 文件路径,可以指定到一个文件,也可以用 * 通配符指定某个目录下的所有文件。通配符必须匹配到文件,而不能是目录。
35. PARTITION:
37. 如果指定此参数,则只会导入指定的分区,导入分区以外的数据会被过滤掉。
38. 如果不指定,默认导入table的所有分区。
40. NEGATIVE:
41. 如果指定此参数,则相当于导入一批“负”数据。用于抵消之前导入的同一批数据。
42. 该参数仅适用于存在 value 列,并且 value 列的聚合类型仅为 SUM 的情况。
44. column_separator:
46. 用于指定导入文件中的列分隔符。默认为 \t
47. 如果是不可见字符,则需要加\\x作为前缀,使用十六进制来表示分隔符。
48. 如hive文件的分隔符\x01,指定为"\\x01"
50. file_type:
52. 用于指定导入文件的类型,例如:parquet、orc、csv。默认值通过文件后缀名判断。
54. column_list:
56. 用于指定导入文件中的列和 table 中的列的对应关系。
57. 当需要跳过导入文件中的某一列时,将该列指定为 table 中不存在的列名即可。
58. 语法:
59. (col_name1, col_name2, ...)
61. columns_from_path:
63. 用于指定需要从文件路径中解析的字段。
64. 语法:
65. (col_from_path_name1, col_from_path_name2, ...)
67. SET:
69. 如果指定此参数,可以将源文件某一列按照函数进行转化,然后将转化后的结果导入到table中。
70. 目前支持的函数有:
72. strftime(fmt, column) 日期转换函数
73. fmt: 日期格式,形如%Y%m%d%H%M%S (年月日时分秒)
74. column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。
75. 如果没有column_list,则按照palo表的列顺序默认输入文件的列。
77. time_format(output_fmt, input_fmt, column) 日期格式转化
78. output_fmt: 转化后的日期格式,形如%Y%m%d%H%M%S (年月日时分秒)
79. input_fmt: 转化前column列的日期格式,形如%Y%m%d%H%M%S (年月日时分秒)
80. column: column_list中的列,即输入文件中的列。存储内容应为input_fmt格式的日期字符串。
81. 如果没有column_list,则按照palo表的列顺序默认输入文件的列。
83. alignment_timestamp(precision, column) 将时间戳对齐到指定精度
84. precision: year|month|day|hour
85. column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。
86. 如果没有column_list,则按照palo表的列顺序默认输入文件的列。
87. 注意:对齐精度为year、month的时候,只支持20050101~20191231范围内的时间戳。
89. default_value(value) 设置某一列导入的默认值
90. 不指定则使用建表时列的默认值
92. md5sum(column1, column2, ...) 将指定的导入列的值求md5sum,返回32位16进制字符串
94. replace_value(old_value[, new_value]) 将导入文件中指定的old_value替换为new_value
95. new_value如不指定则使用建表时列的默认值
97. hll_hash(column) 用于将表或数据里面的某一列转化成HLL列的数据结构
99. 3. opt_properties
101. 用于指定一些特殊参数。
102. 语法:
103. [PROPERTIES ("key"="value", ...)]
105. 可以指定如下参数:
106. cluster: 导入所使用的 Hadoop 计算队列。
107. timeout: 指定导入操作的超时时间。默认超时为3天。单位秒。
108. max_filter_ratio:最大容忍可过滤(数据不规范等原因)的数据比例。默认零容忍。
109. load_delete_flag:指定该导入是否通过导入key列的方式删除数据,仅适用于UNIQUE KEY,
110. 导入时可不指定value列。默认为false。
112. 5. 导入数据格式样例
114. 整型类(TINYINT/SMALLINT/INT/BIGINT/LARGEINT):1, 1000, 1234
115. 浮点类(FLOAT/DOUBLE/DECIMAL):1.1, 0.23, .356
116. 日期类(DATE/DATETIME):2017-10-03, 2017-06-13 12:34:03。
117. (注:如果是其他日期格式,可以在导入命令中,使用 strftime 或者 time_format 函数进行转换)
118. 字符串类(CHAR/VARCHAR):"I am a student", "a"
119. NULL值:\N
121. 6. S3等对象存储导入参数
122. fs.s3a.access.key 用户AK,必填
123. fs.s3a.secret.key 用户SK,必填
124. fs.s3a.endpoint 用户终端,必填
125. fs.s3a.impl.disable.cache 是否启用缓存,默认true,可选
example
1. 1. 导入一批数据,指定超时时间和过滤比例。指定导入队列为 my_cluster。
3. LOAD LABEL example_db.label1
4. (
5. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file")
6. INTO TABLE `my_table`
7. )
8. PROPERTIES
9. (
10. "cluster" = "my_cluster",
11. "timeout" = "3600",
12. "max_filter_ratio" = "0.1"
13. );
15. 其中 hdfs_host 为 namenode 的 host,hdfs_port 为 fs.defaultFS 端口(默认9000)
17. 2. 导入一批数据,包含多个文件。导入不同的 table,指定分隔符,指定列对应关系
19. LOAD LABEL example_db.label2
20. (
21. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file1")
22. INTO TABLE `my_table_1`
23. COLUMNS TERMINATED BY ","
24. (k1, k3, k2, v1, v2),
25. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file2")
26. INTO TABLE `my_table_2`
27. COLUMNS TERMINATED BY "\t"
28. (k1, k2, k3, v2, v1)
29. );
31. 3. 导入一批数据,指定hive的默认分隔符\x01,并使用通配符*指定目录下的所有文件
33. LOAD LABEL example_db.label3
34. (
35. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/*")
36. NEGATIVE
37. INTO TABLE `my_table`
38. COLUMNS TERMINATED BY "\\x01"
39. );
41. 4. 导入一批“负”数据
43. LOAD LABEL example_db.label4
44. (
45. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/old_file)
46. NEGATIVE
47. INTO TABLE `my_table`
48. COLUMNS TERMINATED BY "\t"
49. );
51. 5. 导入一批数据,指定分区
53. LOAD LABEL example_db.label5
54. (
55. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file")
56. INTO TABLE `my_table`
57. PARTITION (p1, p2)
58. COLUMNS TERMINATED BY ","
59. (k1, k3, k2, v1, v2)
60. );
62. 6. 导入一批数据,指定分区, 并对导入文件的列做一些转化,如下:
63. 表结构为:
64. k1 datetime
65. k2 date
66. k3 bigint
67. k4 varchar(20)
68. k5 varchar(64)
69. k6 int
71. 假设数据文件只有一行数据,5列,逗号分隔:
73. 1537002087,2018-08-09 11:12:13,1537002087,-,1
75. 数据文件中各列,对应导入语句中指定的各列:
76. tmp_k1, tmp_k2, tmp_k3, k6, v1
78. 转换如下:
80. 1) k1:将 tmp_k1 时间戳列转化为 datetime 类型的数据
81. 2) k2:将 tmp_k2 datetime 类型的数据转化为 date 的数据
82. 3) k3:将 tmp_k3 时间戳列转化为天级别时间戳
83. 4) k4:指定导入默认值为1
84. 5) k5:将 tmp_k1、tmp_k2、tmp_k3 列计算 md5 值
85. 6) k6:将导入文件中的 - 值替换为 10
87. LOAD LABEL example_db.label6
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. (tmp_k1, tmp_k2, tmp_k3, k6, v1)
94. SET (
95. k1 = strftime("%Y-%m-%d %H:%M:%S", tmp_k1),
96. k2 = time_format("%Y-%m-%d %H:%M:%S", "%Y-%m-%d", tmp_k2),
97. k3 = alignment_timestamp("day", tmp_k3),
98. k4 = default_value("1"),
99. k5 = md5sum(tmp_k1, tmp_k2, tmp_k3),
100. k6 = replace_value("-", "10")
101. )
102. );
104. 7. 导入数据到含有HLL列的表,可以是表中的列或者数据里面的列
106. LOAD LABEL example_db.label7
107. (
108. DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file")
109. INTO TABLE `my_table`
110. PARTITION (p1, p2)
111. COLUMNS TERMINATED BY ","
112. SET (
113. v1 = hll_hash(k1),
114. v2 = hll_hash(k2)
115. )
116. );
keyword
1. LOAD
