本文为您整理应用MaxCompute Lightning过程中的常见问题。

  • Q:如何使用Lightning,有WEB控制台可以使用吗?

    A:Lightning没有提供WEB控制台接口,可以通过SQL客户端/BI工具等连接Lightning的JDBC/ODBC接口,即可访问对应的MaxCompute项目。

  • Q:还没有建表的情况下,能够使用MaxCompute Lightning查询什么数据?

    A:您使用阿里云账号,通过MaxCompute Lightning能够访问到指定MaxCompute项目中的数据表,如果项目中还没有数据表,您需要首先利用Dataworks或者odpscmd客户端等工具,在MaxCompute项目中进行创建并加载、加工数据。这时再通过MaxCompute Lightning连接到该项目,这时就能查看到项目内有权限的数据表,对这些表进行查询。

  • Q:MaxCompute Lightning是否限制查询的数据量?查询多大规模的数据性能较好?
    A:目前每次查询对单表的扫描数据量限制为1TB,数据量越小查询性能越好。
    说明 建议不要扫描超过100GB的表数据。超过100GB的表数据虽然仍可查询,但查询性能会随数据规模增长逐渐下降。如果需要扫描量超过100GB的查询,建议您根据性能表现考虑使用MaxCompute SQL。
  • Q:使用BI工具,通过拖拽方式选择一张分区表进行分析时,提示报错: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

    A:MaxCompute Lightning为保障查询性能,对分区表的分区数量进行了限制,一次查询所扫描的单表最大分区数量不能超过1024。由于部分BI工具使用拖拽方式选择表直接进行分析,不能BI前端指定分区条件,导致请求扫描的分区数超限制、触发了Lightning限制而报错提示。建议先对查询的数据表进行加工处理,处理为非分区表或分区小于1024的表再进行分析。

  • Q:连接时提示创建数据连接失败: ERROR: SSL required

    A:MaxCompute Lightning要求SSL连接服务,需要客户端指定以SSL方式连接。如果使用客户端工具,可以选择SSL连接选项。如果没有相关选项,可以在JDBC URL连接串中增加SSL参数,需要替换为您项目所在region的endpoint、连接的项目名称,例如jdbc:postgresql://lightning.cn-shanghai.maxcompute.aliyun.com:443/myproject?ssl=true

  • Q:使用Workbench/J客户端查询时提示报错Error:current transaction is aborted,commands ignored until end of transaction block
    A:使用的客户端请勾选 Autocommit选项。

  • Q:请求连接时返回提示报错ERROR: Failed to login the project: <project name>. Lightning service has not been activated for your project, please contact the administrator.

    A:MaxCompute项目还没有开通Lightning服务,需要申请开通后使用。

  • Q:MaxCompute项目名称大小写敏感吗?

    A:服务连接时,MaxCompute项目名称大小写敏感,连接时的项目名称请全部使用小写连接。

  • Q:是否推荐直接通过Lightning拉取全量明细数据?

    A:通过SQL客户端工具/BI工具对数据量大的表执行select * 不加限制条件时,大量数据需要从服务侧端抽取到客户端侧,从而导致查询时间将大大延长。应尽量在服务器侧对明细数据进行分析,返回聚合后的较少量的数据以降低端到端的查询时延,减少或避免直接通过Lightning拉取明细数据。

  • Q:Lightning如何处理数字开头的字段?

    A: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;

  • Q:在应用程序中使用JDBC连接MaxCompute Lightning服务时建议如何配置?

    A:在应用程序中使用JDBC连接MaxCompute Lightning服务时,建议配置prepareThreshold=0,autocommit=True。

  • Q:是否可以通过Psycopg2来连接访问Lightning?
    A:可以,请参考如下示例。
    #!/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 dual")
        # step3. print result
        if result:
            for i in xrange(0, len(result)):
                print
                "Got %d row from Lightning:%s" % (i + 1, result[i])
  • Q:使用MaxCompute Lightning有哪些性能优化建议?
    A:
    1. 使用分区表,并在查询时指定分区,减少扫描的数据量。
    2. 查询中只对需要列进行查询,减少对不必要列的查询。例如select * from table 修改为 select a,b from table;
    3. 对于数据量较大的表,查询主要以等值(例如select id,value from table where id=123)查询为主要查询场景时,建议可以创建或者将原表修改为Hash Clustering表,利用CLUSTERED字段加速该字段的filter效率.
    4. 对于数据量不大但查询时长明显较大时,需要判断是否存在数据倾斜问题:可以通过ANALYZE EXPLAIN方式查看执行计划,获取诊断信息。