百度数据仓库palo使用总结

2022-04-11 00:00:00 查询 创建 数据 文件 指定

palo使用:
1、rolup(上卷表)是一种物化索引,附属于Base表,是base表的一种辅助数据结构。ROLLUP数据是独立物理存储
作用:提高查询速度
查询:用户可以在 Base 表的基础上,创建或删除 ROLLUP,但是不能在查询中显式的指定查询某 ROLLUP。是否命中 ROLLUP 完全由 Palo 系统自动决定。
查询能否命中 ROLLUP 的一个必要条件(非充分条件)是,查询所涉及的所有列(包括 select list 和 where 中的查询条件列等)都存在于该 ROLLUP 的列中。
数据存储:ROLLUP数据是独立物理存储,创建的ROLLUP表越多,占用的磁盘空间越大
数据更新:与base表完全同步
聚合方式:ROLLUP 中列的聚合方式,与 Base 表完全相同。在创建 ROLLUP 无需指定,也不能修改。
影响:对导入速度有影响,ETL阶段自动产生所有ROLLUP数据,不会降低查询速度(更好)
命令:
创建 rollup index: ALTER TABLE tb_name ADD ROLLUP rollup_name (column_name1, column_name2, ...) [FROM from_index_name] [PROPERTIES ("key"="value", ...)]
删除 rollup index:ALTER TABLE DROP ROLLUP rollup_name [PROPERTIES ("key"="value", ...)]
显示 Base 表和所有已创建完成的 ROLLUP:DESC tB_name ALL
修改rollup index名称:ALTER TABLE tb_name RENAME ROLLUP old_rollup_name new_rollup_name
2、palo表
修改表名: ALTER TABLE table1 RENAME table2;
3、表分区、分桶
将表tb_name中名为 p1 的 partition 修改为 p2:ALTER TABLE tb_name RENAME PARTITION p1 p2;
显示分区:show partitions from table_name
4、load
LOAD TABLE (
DATA INFILE(
"file_path1 , file_path2, ..."
)
INFO TABLE tb_name
COLUMNS TERMINATED BY "column_separator"
(column_list)
)
WITH BROKER broker_name
PROPERTIES(
"timeout"="1800",
"max_filter_ratio"="0.1"
)

file_path:broker中的文件路径,可以指定到一个文件,也可以用/*通配符指定某个目录下的所有文件。
column_separator:用于指定导入文件中的列分隔符。默认为\t。如果是不可见字符,则需要加\\x作为前缀,使用十六进制来表示分隔符。如hive文件的分隔符\x01,指定为"\\x01"
column_list:用于指定导入文件中的列和table中的列的对应关系。当需要跳过导入文件中的某一列时,将该列指定为table中不存在的列名即可,语法:
(col_name1, col_name2, ...)

注意:
1、数据导入到palo的时候,ETl是并行的,load是串行的,如果一次性导入的文件较多,容易造成CSV文件load到palo时出现阻塞在loading的阶段
2、创建rollup表的时候,需要一个rollup创建完成(可能需要1-3秒),才能继续创建下一个rollup表,因此代码里创建多个rollup表的时候,需要写一个监控接口来监控rollup是否创建完成。
通过SHOW ALTER TABLE ROLLUP语句,然后判断State字段FINISHED是完成
3、palo指定分区的列必须是key,且必须是整型的,分区只能指定一列;分桶可以指定多列但是指定的列也必须是key
4、定于palo表结构时,key列必须在value列之前,应尽量使用整型,因为整型的计算和查询效率远高于字符串
5、所有列的(包括key、value)总字节长度不得超过100k
6、delete是一个同步命令,命令返回即表示执行成功,不建议大量频繁使用delete,这会导致查询效率降低。通过show delete可以查看删除情况。
关于删除常见问题:该问题通常可能是:1)delete 命令中指定的 Partition 不对,不包含对应的删除条件的数据。2)where 后面的条件格式不正确。如删除整型时,条件值添加了引号;或删除日期数据时,没有添加引号等。
7、key列不能使用double、float,必须使用decimal;value列也应尽量只用decimal,以保证数据精度。
8、查询load任务时可以使用show load order by jobid desc limit 10来限制展示的任务条数。
9、比较重要,如果查询报错memory limit exceeded,只是查询内存超过了限制,为了减少各用户相互影响,对查询使用的内存有限制,默认为落在单个节点上使用的内存不能超过2GB,因此需要用户尽量优
化表结构和查询,如果优化后还报这个错通过show variables,查看单个be节点执行查询的内存限制exec_mem_limit的值,然后通过命令set exec_mem_limit = new_size提高限制,new_size为新内存的大小,单位为字节,set是session级别的,每次重连则需要重新设置。
————————————————

原文链接:https://blog.csdn.net/hsbs920813/article/details/81711600

相关文章