本文为您整理使用交互式分析(Interactive Analytics)过程中的常见问题。

常见问题

  1. 如何使用交互式分析,有WEB控制台可以使用吗?

    交互式分析有基于DataWorks的HoloStudio提供WEB控制台功能,您可以登录DataWorks,进入HoloStudio,绑定交互式分析实例即可使用。

  2. 还没有建表的情况下,能够使用交互式分析查询什么数据?

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

  3. 交互式分析是否限制查询的数据量?查询多大规模的数据性能较好?

    目前每次查询对单个外部表的扫描数据量限制为100GB,数据量越小查询性能越好。

    说明
    • 直接查询建议不要扫描超过100GB的表数据。超过100GB的表数据虽然仍可查询,但查询性能会随数据规模增长逐渐下降。超过100GB的数据建议使用导入查询。
    • 服务连接时,项目名称大小写敏感,连接时的项目名称请全部使用小写连接。
  4. 交互式分析查询MaxCompute数据有直接查询和导入查询两种方式,具体怎么区分?
    • MaxCompute直接分析使用场景:首选方案,查询数据量小于100GB(经过分区过滤后,一个query命中分区的大小,与查询相关字段的大小无关)。
    • MaxCompute导入查询使用场景:单表查询数据量大于100GB、复杂查询、含索引的查询、数据需更新、insert操作的场景。
  5. 在HoloStudio中数据查询时,每个功能模块怎么选用?
    • 50秒内的查询选用SQL Console。
    • 超过50秒的查询选用终端。
    • 大量数据的查询使用数据开发,前往DataWorks调度。
  6. 是否推荐直接通过交互式分析拉取全量明细数据?

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

  7. 交互式分析如何处理数字开头的字段?
    交互式分析使用的Postgres的SQL语法,不支持数字开头的字段。遇到中数字开头的字段时,在交互式分析的SQL查询中可以对该字段增加双引号进行查询。示例如下:
    select bizdate,"1_day_active_users","7_day_active_users" from t_active_users;
  8. 在应用程序中使用JDBC连接 交互式分析服务时建议如何配置?

    在应用程序中使用JDBC连接 交互式分析服务时,建议配置prepareThreshold=0,autocommit=True。

  9. 是否可以通过Psycopg2来连接访问交互式分析?
    可以,示例如下。
    #!/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])
  10. 使用交互式分析有哪些性能优化建议?
    • 使用分区表,并在查询时指定分区,减少扫描的数据量。
    • 查询中只对需要列进行查询,减少对不必要列的查询,示例如下:
      select * from table
      							

      修改为

      select a,b from table;
      说明
      1. 对于数据量较大的表,查询主要以等值查询为主要查询场景时,建议可以创建或者将原表修改为Hash Clustering表,利用CLUSTERED字段加速该字段的filter效率。
        select id,value from table where id=123
      2. 对于数据量不大但查询时长明显较大时,需要判断是否存在数据倾斜问题:可以通过ANALYZE EXPLAIN方式查看执行计划,获取诊断信息。