本文为您介绍使用MaxCompute Lightning过程中的常见问题。
MaxCompute Lightning查询连接数是否有限制?
单个MaxCompute项目的Lightning查询并发数上限为20。
MaxCompute Lightning是否限制查询的数据量?查询多大规模的数据性能较好?
如何使用Lightning,有Web控制台可以使用吗?
Lightning没有提供Web控制台,可以通过SQL客户端、BI工具等连接Lightning的JDBC或ODBC接口,即可访问对应的MaxCompute项目。
还没有建表的情况下,能够使用MaxCompute Lightning查询什么数据?
您使用阿里云账号,通过MaxCompute Lightning能够访问到指定MaxCompute项目中的数据表,如果项目中还没有数据表,您需要首先利用DataWorks或者odpscmd客户端等工具,在MaxCompute项目中进行创建并加载、加工数据。这时再通过MaxCompute Lightning连接到该项目,这时就能查看到项目内有权限的数据表,对这些表进行查询。
Lightning如何处理数字开头的字段?
MaxCompute支持以数字开头的字段,例如1_day_active_users
。Lightning使用的Postgres的SQL语法,不支持数字开头的字段。遇到MaxCompute中数字开头的字段时,在Lightning的SQL查询中可以对该字段增加双引号进行查询。例如:select bizdate,"1_day_active_users","7_day_active_users" from t_active_users;
。
在应用程序中使用JDBC连接MaxCompute Lightning服务时建议如何配置?
在应用程序中使用JDBC连接MaxCompute Lightning服务时,建议配置prepareThreshold=0
、autocommit=True
。
是否推荐直接通过Lightning拉取全量明细数据?
不推荐。通过SQL客户端工具、BI工具对数据量大的表执行全量查询(SELECT * FROM table;
)时,大量数据需要从服务端抽取到客户端,从而导致查询时间延长。
因此建议您尽量在服务端对明细数据进行分析,返回过滤后的较少量的数据至客户端,以降低端到端的查询时延,减少或避免直接通过Lightning拉取明细数据。
是否可以通过Psycopg2来连接访问Lightning?
#!/usr/bin/env python
# coding=utf-8
import psycopg2
import sys
def query_lightning(lightning_conf, sql):
"""Query data through Lightning by sql
Args:
lightning_conf: a map contains settings of 'dbname', 'user', 'password', 'host', 'port'
sql: query submit to Lightning
Returns:
result: the query result in format of list of rows
"""
result = None
conn = None
conn_str = None
try:
conn_str = ("dbname={dbname} "
"user={user} "
"password={password} "
"host={host} "
"port={port}").format(**lightning_conf)
except Exception, e:
print >> sys.stderr, ("Invalid Lightning' configuration "
"{}".format(e))
sys.exit(1)
try:
conn = psycopg2.connect(conn_str)
conn.set_session(autocommit=True) # This will disable transaction
# started with keyword BEGIN,
# which is currently not
# supported by Lightning' public service
cur = conn.cursor()
# execute Lightning' query
cur.execute(sql)
# get result
result = cur.fetchall()
except Exception, e:
print >> sys.stderr, ("Failed to query data through "
"Lightning: {}".format(e))
finally:
if conn:
conn.close()
return result
if __name__ == "__main__":
# step1. setup configuration
lightning_conf = {
"dbname": "project",
"user": "accessId", # AccessId
"password": "accessKey", # AccessKey
"host": "lightning.cn-shanghai.maxcompute.aliyun-inc.com", # Lightning Endpoint
"port": 443
}
# step2. issue a query
result = query_lightning(lightning_conf, "select count(1) from table_name")
# step3. print result
if result:
for i in xrange(0, len(result)):
print
"Got %d row from Lightning:%s" % (i + 1, result[i])
使用MaxCompute Lightning有哪些性能优化建议?
- 查询分区表时,指定分区减少扫描的数据量。
- 查询中只对需要列进行查询,减少对不必要列的查询。例如
select * from table;
修改为select a,b from table;
。 - 对于数据量较大的表,查询以等值查询(例如
select id,value from table where id=123;
)为主要查询场景时,建议可以创建或者将原表修改为Hash Clustering表,利用CLUSTERED字段加速该字段的过滤效率。 - 对于数据量不大但查询时间较长的表,需要判断是否存在数据倾斜问题。可以通过ANALYZE EXPLAIN方式查看执行计划,获取诊断信息。
使用BI工具,通过拖拽方式选择一张分区表进行分析时,报错AXF Exception,如何解决?
ERROR: AXF Exception: specified partitions count in odps table: <project_name.table_name> is: xxx, exceeds the limitation of xxx, please add stricter partition filter
MaxCompute Lightning为保障查询性能,限制了分区表可以查询的分区数。一次查询单表所扫描的最大分区数不能超过1024个。由于部分BI工具使用拖拽方式选择表直接进行分析,不能在BI前端指定分区条件,导致请求扫描的分区数超限制、触发了Lightning限制而提示报错。
建议您先对查询的数据表进行加工处理,处理为非分区表或分区数小于1024的表再进行分析。
连接时提示创建数据连接失败ERROR: SSL required,如何解决?
MaxCompute Lightning要求SSL连接服务,需要第三方客户端指定以SSL方式连接。如果使用第三方客户端工具没有SSL连接相关选项,可以在JDBC URL连接串中增加SSL参数,例如jdbc:postgresql://lightning.cn-shanghai.maxcompute.aliyun.com:443/myproject?ssl=true
。
使用Workbench/J客户端查询时,报错当前事务被中止,如何解决?
- 问题现象
使用Workbench/J客户端查询时,返回报错如下。
rror:current transaction is aborted,commands ignored until end of transaction block.
- 解决措施
Workbench/J客户端请勾选Autocommit选项。
请求连接时,报错Failed to login the project,如何解决?
- 问题现象
返回报错如下。
ERROR: Failed to login the project: <project name>. Lightning service has not been activated for your project, please contact the administrator
- 产生原因
MaxCompute项目所属地域还没有开通Lightning服务,需要申请开通后使用。
- 解决措施
为MaxCompute项目所属地域开通Lightning服务。
请求连接时,报错ConnectionException,如何解决?
- 问题现象
返回报错如下。
ConnectionException: HikariPool-2 - Connection is not available, request timed out after 10018ms
- 产生原因
报错为网络连接超时,可能是网络波动导致的。
- 解决措施
确认网络连接状态,在网络连接稳定的情况下重新连接。