使用EXPORT
导出表格数据到CSV
文件中。
所需权限
需要用户拥有
admin
权限。
注意:
此语句不支持事务。
建议导出为每个节点都可以访问到的公共文件。
从hubble中导出数据
以下示例nodelocal://1/ ,其中数字1代表在第一个节点进行操作,且推荐。
export into
csv 'nodelocal://1/cust'
with delimiter ='|',nullas=''
from
select * from tt_image1;
常用的分隔符有\t或者\001等,以\001为例
数据准备:
create table cust_info(
cust_no string primary key,
cust_name varchar(30) not null,
cust_card_no varchar(18),
cust_phoneno decimal(15),
cust_address varchar(30),
cust_type varchar(10),
index(cust_card_no)
);
insert into cust_info values('14435550','王吉','12022519960321531X',15122511874,'天津武清','抵押');
insert into cust_info values('14435551','张贺','431256197306265320',15534343555,null,'质押');
...
nullas参数来定义字段表示过滤null,比如:以上第二条insert语句中地址字段为空值
export into
csv 'nodelocal://1/cust'
with delimiter =e'\001',nullas=''
from
select * from cust_info;
filename | rows | bytes
-------------------------------------------------------------------+------+------------
export17665471189f3d580000000000000001-n871817396986347523.0.csv | 115 | 121347951
对应的导入语句见下文import
栏目
注意:在处理更多行之前上传文件大小的默认值为32M,为减少导出的csv数量,加入参数
chunk_size
,建议chunk_size
='512M'
export into
csv 'nodelocal://1/cust'
with delimiter ='|' ,chunk_size='512M'
from
select * from tt_image1;
返回结果:文件数据大,可能会导出多个csv
filename | rows | bytes
--------------------------------------------------+------+------------
export16d82d3d6101475c0000000000000001-n3.0.csv | 15 | 121347951
export16d82d3d6101475c0000000000000001-n4.0.csv | 44 | 355954016
用于将表格数据导入到单个表中,无法在事务中使用。
成功启动导入后,它将导入注册为job,你可以使用SHOW JOBS
查看。
导入开会后,你可以使用PAUSE JOB
,RESUME JOB
和CANCEL JOB
来控制它。
暂停然后恢复IMPORT
作业将导致它从头开始重新启动。
所需权限
只有
root
用户才能运行IMPORT
任务。
注意 csv的导入:因为目录结尾是*.csv,所以目录下只能放本张表导出的csv
在导入数据前一定要先创建表
创建表img,并将数据导入到img
import into img ( a , b
) csv data ( 'nodelocal://1/cust/*.csv' )
with delimiter = '|'
;
返回结果:
job_id | status | fraction_completed | rows | index_entries | system_records | bytes
+--------------------+-----------+--------------------+------+---------------+----------------+-----------+
739023580166127617 | succeeded | 1 | 59 | 0 | 0 | 238652345
分隔符\001为例,将数据进行导入
nullif参数防止导入的null值都变成空字符串
import into cust_info1 CSV DATA(
'nodelocal://1/cust/*.csv')WITH delimiter = e'\001',nullif = e'';
job_id | status | fraction_completed | rows | index_entries | bytes
+------------------- +-----------+--------------------+------+---------------+-----------+
871818819657760769 | succeeded | 1 | 115 | 5 | 238652345
在数据导入的过程中,字段中有可能存在特殊字符,如果字段存在有双引号(例如:"北京")或者字段有转义字符(例如:shanghai\pudong),导入时候可以参考以下参数:
fields_terminated_by
用于单个字符的分割fields_enclosed_by
用于将字段的内容包装起来的符号的情况,例如:双引号fields_escaped_by
用于字段中包含的转义字符的情况,例如:\
如下一张表:
create table test (id int,cust_address string,aml string);
文件test.txt
里面的样例数据如下:
1,"beijing",qwe\123
2,"shanghai",env\456
import into test delimited data ('nodelocal://1/test.txt')
with fields_terminated_by = e',', fields_enclosed_by='"', fields_escaped_by='\';
job_id | status | fraction_completed | rows | index_entries | bytes
---------------------+-----------+--------------------+------+---------------+--------
779219645387079681 | succeeded | 1 | 2 | 0 | 78
查看集群中所有长时间运行的任务,用于获取到影响集群性能的关键任务,从而帮助用户来控制任务状态。
所需权限
仅
root
用户执行SHOW JOBS
语句
SHOW JOBS;
可将SHOW JOBS
作为SELECT
语句的数据源用于过滤job,通过WHERE
条件来查找需要的job信息。
SELECT * FROM [ SHOW JOBS ]
WHERE
job_type = 'RESTORE'
AND status IN ( 'running', 'succeeded' )
ORDER BY
created DESC;
用于停止长时间运行的job,包括IMPORT
、BACKUP
与RESTORE
任务。取消RESTORE
后,将清理部分还原的数据。可能会对集群性能产生短暂的较小的影响。
所需权限
默认情况下,只有
root
用户可以使用CANCEL JOB
停止单个任务
CANCEL JOB <job_id>;
停止多个任务
CANCEL JOBS (SELECT job_id FROM [SHOW JOBS] WHERE user_name = 'beagledata');
PAUSE JOB
语句可以暂停的IMPORT
、BACKUP
、RESTORE
、USER-CREATED TABLESTATISTICS JOBS
和AUTOMATICTABLE STATISTICS JOBS
任务。
注意
无法暂停schema的修改
所需权限
用户需要root权限
暂停单个任务
PAUSE JOB <job_id>;
暂停多个任务
PAUSE JOBS (SELECT job_id FROM [SHOW JOBS] WHERE user_name = 'beagledata');
RESUME JOB
语句可以恢复已暂停的IMPORT
、BACKUP
或RESTORE
任务。
所需权限
用户需要
root
权限
恢复单个JOB
RESUME job <job_id>;
恢复多个JOB
RESUME JOBS (SELECT job_id FROM [SHOW JOBS] WHERE user_name = 'beagledata');
EXPLAIN说明
语句返回指定语句的查询计划,用户可以根据explain
语句优化查询。
查询优化
使用EXPLAIN
输出,可以按如下方式优化查询:
可以通过以下方式了解查询是否正在执行整个表扫描EXPLAIN
:
参数介绍
参数 | 详情 |
---|---|
VERBOSE | 尽可能多地显示有关声明计划的信息。 |
TYPES | 选择评估中间 SQL 表达式的中间数据类型。 |
OPT | 显示由基于成本的优化器生成的语句计划树。 |
VEC | 显示有关查询的矢量化执行计划的详细信息。 |
DISTSQL | 生成一个指向分布式 SQL 物理语句计划图的 URL。 |
preparable_stmt | 想要了解详细信息的语句。所有可准备的陈述都是可以解释的。 |
返回信息
描述 | 详情 |
---|---|
全局属性 | 适用于整个查询计划的属性。全局属性包括distribution和vectorized。 |
报表计划树属性 | 报表计划层次结构的树表示。 |
指数推荐:N | 索引建议的数量,后跟索引操作列表和执行操作的 SQL 语句。 |
时间 | 查询的时间详细信息,总时间是查询的计划和执行时间。执行时间是最终语句计划完成所用的时间,网络时间是在集群中的相关节点上分发查询所花费的时间。有些查询不需要分布式,所以网络时间为0ms。 |
定位索引和键范围
可以使用EXPLAIN
来了解查询使用哪些索引和键范围,这可以确定查询没有执行全表扫描。
create table shops (aml int primary key, num int);
explain select * from shops where num between 4 and 6;
info
-----------------------------------------------------------------------------------
distribution: full
vectorized: false
• filter
│ estimated row count: 1
│ filter: (num >= 4) AND (num <= 6)
│
└── • scan
estimated row count: 1 (100% of the table; stats collected 2 seconds ago)
table: shops@primary
spans: FULL SCAN
(11 rows)
说明:重点查看spans
值,因为列num不是索引列,进行过滤的查询会扫描整个表。
explain select * from shops where aml between 80 and 100;
info
-----------------------------------------------------------------------------
distribution: local
vectorized: false
• scan
estimated row count: 1 (100% of the table; stats collected 6 hours ago)
table: shops@primary
spans: [/80 - /100]
说明:重点查看spans
值,因为列aml是索引列,进行过滤的查询语句避免了全表扫描。
单表执行样例
explain select * from bptfhist where tx_tm>151111 order by tx_tm asc;
info
------------------------------------------------------------------------------------------------------
distribution: full
vectorized: true
• sort
│ estimated row count: 40,854
│ order: +tx_tm
│
└── • filter
│ estimated row count: 40,854
│ filter: tx_tm > 151111
│
└── • scan
estimated row count: 100,000 (100% of the table; stats collected 24 days ago)
table: bptfhist@primary
spans: FULL SCAN
计划者选择了一个分布式执行计划,其中查询的执行由多个节点并行执行,然后由网关节点返回结果。具有full分布的执行计划不会在集群中的所有节点上处理。local仅在网关节点上执行具有分布的执行计划。即使执行计划是local,也可能从远程节点获取行数据,但数据的处理由本地节点执行。
该计划将使用矢量化执行引擎执行。
查询扫描的估计行数,在本例中100000为数据行;查询跨越的表的百分比,在本例中为100%;以及上次收集表的统计信息的时间。
排序将在revenue列上按升序排列。
列上的扫描过滤器revenue。
在索引上扫描表。
该表在索引的所有键范围上进行即全表扫描。
表联合执行样例
explain select * from test_trans as t join bptfhist as b on b.ac = t.ac;
distribution: full
vectorized: false
• lookup join
│ table: bptfhist@primary
│ equality: (rowid) = (rowid)
│ equality cols are key
│
└── • lookup join
│ estimated row count: 1
│ table: bptfhist@idx_bptfhist3
│ equality: (ac) = (ac)
│
└── • scan
estimated row count: 1 (100% of the table; stats collected 17 minutes ago)
table: test_trans@primary
spans: FULL SCAN
备注:相比于单表查询equality
输出显示查询将执行的连接条件。
EXPLAIN ANALYZE说明
EXPLAIN ANALYZE
语句的工作方式类似于EXPLAIN
,主要区别在于前者实际上会执行语句。这样可以将查询计划中的估计值与执行时所遇到的实际值进行比较。
参数介绍
参数 | 详情 |
---|---|
PLAN | 执行该语句并返回一个带有可解释语句的计划和执行时间的语句计划。 |
DISTSQL | 执行语句并返回语句计划和性能统计信息以及生成的指向图形分布式 SQL物理语句计划树的链接。 |
DEBUG | 执行该语句并生成一个 ZIP 文件,其中包含有关查询和查询中引用的数据库对象的详细信息的文件。 |
preparable_stmt | 您要执行和分析的语句。所有可准备的陈述都是可以解释的。 |
备注:默认情况下,EXPLAIN ANALYZE
使用该PLAN
选项,EXPLAIN ANALYZE
与EXPLAIN ANALYZE (PLAN)
产生相同的输出,也是常用的。
返回信息
一条成功的EXPLAIN ANALYZE
语句会返回一个表,列中包含以下详细信息:
参数 | 详情 |
---|---|
全局属性 | 适用于整个语句计划的属性和统计信息。 |
报表计划树属性 | 报表计划层次结构的树表示。 |
节点详细信息 | 树中当前语句计划节点的属性、列和排序详细信息。 |
时间 | 声明的时间详细信息。总时间是语句的计划和执行时间。执行时间是最终语句计划完成所用的时间。网络时间是在集群中的相关节点之间分发语句所花费的时间。有些语句不需要分发,所以网络时间为0ms。 |
语句分析重点是全局属性和报表计划树属性两类信息的查看
全局属性
参数 | 详情 |
---|---|
planning time | 计划者创建报表计划所花费的总时间。 |
execution time | 完成最终执行计划所需的时间。 |
distribution | 声明是分发的还是本地的。如果distribution是full,则语句的执行由多个节点并行执行,则结果由网关节点返回。如果local,则仅在网关节点上执行执行计划。即使执行计划是local,也可能从远程节点获取行数据,但数据的处理由本地节点执行 |
vectorized | 指示此语句中是否使用了向量化执行引擎 |
rows read from KV | 从存储层读取的行数 |
cumulative time spent in KV | 在存储层中花费的总时间 |
maximum memory usage | 此语句在执行期间随时使用的最大内存量 |
network usage | 执行语句时通过网络传输的数据量。如果值为 0 B,则该语句在单个节点上执行并且没有使用网络 |
regions | 受影响节点所在的区域 |
max sql temp disk usage | (仅DISTSQL 参数)执行查询时发生多少磁盘溢出。仅当磁盘使用率大于零时才显示此属性 |
报表计划树属性
参数 | 详情 |
---|---|
processor | 语句计划层次结构中的每个处理器都有一个节点,其中包含有关语句该阶段的详细信息。如有GROUP BY 子句的语句有一个group 处理器,其中包含有关集群节点、行和与操作相关的GROUP BY 操作的详细信息 |
nodes | 受此阶段语句影响的集群节点名称 |
regions | 受影响节点所在的区域 |
actual row count | 执行期间受此处理器影响的实际行数 |
KV time | 此阶段语句在存储层中的总时间 |
KV contention time | 在此声明阶段中存储层争用的时间 |
KV rows read | 在扫描期间,此阶段语句读取的存储层中的行数。 |
KV bytes read | 在扫描期间,在语句的这个阶段从存储层读取的数据量 |
estimated max memory allocated | 为语句估计的最大分配内存 |
estimated max sql temp disk usage | 语句的估计最大临时磁盘使用量 |
estimated row count | 根据语句计划器估计受此处理器影响的行数、查询跨越的表的百分比以及上次收集表的统计信息的时间 |
table | 语句中的扫描操作中使用的表和索引,格式为{table name}@{index name} |
spans | 处理器读取密钥空间的间隔,如果spans 是FULL SCAN ,则在索引的所有键范围上扫描该表。如果spans 是,则处理器仅读取[/1 - /1]具有值的键 |
EXPLAIN ANALYZE
EXPLAIN ANALYZE
语句执行一个查询
explain analyze select jrnno, avg(tx_tm) from bptfhist group by jrnno;
以下展示统计的信息:
info
---------------------------------------------------------------------------------------
planning time: 614µs
execution time: 307ms
distribution: full
vectorized: true
rows read from KV: 100,000 (76 MiB)
cumulative time spent in KV: 235ms
maximum memory usage: 16 MiB
network usage: 384 B (3 messages)
regions: ch-beijin
• group
│ nodes: n4
│ regions: ch-beijin
│ actual row count: 4
│ estimated row count: 4
│ group by: jrnno
│
└── • scan
nodes: n4
regions: ch-beijin
actual row count: 100,000
KV rows read: 100,000
KV bytes read: 76 MiB
estimated row count: 100,000 (100% of the table; stats collected 24 days ago)
table: bptfhist@primary
spans: FULL SCAN
说明:主要关注以下信息:
完成最终执行计划所需的时间
计划者选择了一个分布式执行计划,其中查询的执行由多个节点并行执行,然后由网关节点返回结果。具有full分布的执行计划不会在集群中的所有节点上处理。local仅在网关节点上执行具有分布的执行计划。即使执行计划是local,也可能从远程节点获取行数据,但数据的处理由本地节点执行。
该执行是否使用矢量化执行引擎执行。
从存储层读取的行数
在存储层中花费的总时间
此语句在执行期间随时使用的最大内存量
执行语句时通过网络传输的数据量。如果值为 0 B,则该语句在单个节点上执行并且没有使用网络
执行期间受此处理器影响的实际行数
在扫描期间,此阶段语句读取的存储层中的行数
在扫描期间,在语句的这个阶段从存储层读取的数据量
为语句估计的最大分配内存
语句的估计最大临时磁盘使用量
语句中的扫描操作中使用的表和索引,格式为{table name}@{index name}
处理器读取密钥空间的间隔。如果spans是FULL SCAN,则在索引的所有键范围上扫描该表。如果spans是[/1 - /1],则处理器读取范围键的值是[/1 - /1]
通过监控页面分析sql执行情况
1.登录页面后,点击语句“语句列表”,页面可以清晰的查看到每个SQL的基本
2.选中执行的SQL语句,点击进去,可以具体查看SQL的概况、诊断、逻辑计划及其执行状态