自定义查询

方舟5.0版本中新增API

1.自定义SQL查询

适合查询结果为小数据量的场景(千级数据量),例如分析结果统计,查询数据状态;如需导出更大规模数据,见【章节2.自定义SQL导出

1.1 接口地址

【POST】 /uba/api/sql/query

1.2 请求参数

1.2.1 Body参数说明:

body参数示例:

{
    "sql": "SELECT xwhat,xwhen,xwho FROM event_vd as event  where event.ds=20200214 and event.\"$startup_time\" is not null LIMIT 10",
    "format": "json"
}

body参数说明:

  • sql: 查询的 SQL,例如 SELECT xwhat,xwhen,xwho FROM event_vd LIMIT 10

  • format: 文本输出可选项包括

    • csv:默认格式,sql查询结果输出为csv格式文件。默认文件编码为UTF-8,若导出文件要用excel打开,增加url参数?csvUtfEncoding=0

    • json:sql查询结果输出为一个完整JSON 的json文件

1.2.2 特殊说明:

  1. 可供查询的表有:事件表event_vd,属性表profile_vd

  2. 事件字段、事件属性字段、用户属性字段信息可以参见 API章节中的 元数据管理

  3. 事件或属性字段中如果包含$符号的则需要对该字段加上双引号,双引号也需要转义,例如\"$startup_time\"

  4. 认证参数:接口必传token和appKey两个参数,详情见 项目接口认证

  5. 表名可以不附带数据库名,API程序会根据认证参数,自动为表名加上数据库名,如果自带不符合认证校验的数据库名,接口将返回参数异常,提示包含非当前项目的数据库表

  6. 不支持数据操纵语言DML、数据定义语言DDL以及数据控制语言DCL,只支持数据查询语言DQL(基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块)

  7. API程序默认开启 limit 检测,查询记录数不能超过系统配置的参数项arkweb.open_api.sqlquery.limit,该参数可以通过ambari管理平台进行变更设置,设置为-1表示不限制查询记录条数

1.3 返回结果示例

format为 csv类型

format为 ‌json类型

1.4 接口调用示例

2. 自定义SQL导出

适合sql查询结果为较大数据量的场景(百万级数据量),例如导出事件数据,导出用户数据

2.1 接口地址

【POST】 /uba/api/sql/export

2.2 请求参数

2.2.1 Body参数说明:

body参数示例:

body参数说明:

  • sql: 查询的 SQL,例如 SELECT xwhat,xwhen,xwho FROM event_vd LIMIT 10

  • format: 文本输出可选项包括

    • csv:默认格式,sql查询结果输出为csv格式文件。默认文件编码为UTF-8,若导出文件要用excel打开,增加url参数?csvUtfEncoding=0

    • json:sql查询结果输出为每行一个JSON 的json文件

2.2.2 特殊说明:

  1. 可供查询的表有:事件表event_vd,属性表profile_vd

  2. 事件字段、事件属性字段、用户属性字段信息可以参见 API章节中的 元数据管理

  3. 事件或属性字段中如果包含$符号的则需要对该字段加上双引号,双引号也需要转义,例如\"$startup_time\"

  4. 认证参数:接口必传token和appKey两个参数,详情见 项目接口认证

  5. 表名可以不附带数据库名,API程序会根据认证参数,自动为表名加上数据库名,如果自带不符合认证校验的数据库名,接口将返回参数异常,提示包含非当前项目的数据库表

  6. 不支持数据操纵语言DML、数据定义语言DDL以及数据控制语言DCL,只支持数据查询语言DQL(基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块)

  7. 该接口不对sql 进行limit 限制,但受限于查询时长,默认在10分钟超时时间内,经过测试该API能够导出200万左右条记录(仅供参考,不同机器配置和查询列数差异会导致可导出记录数存在一定的偏差)

2.3 返回结果示例

format为 csv类型的输出举例:

format为 json类型输出举例:

输出结果备注:

  1. /sql/export 接口输出,因为可以支撑大数据量,为了方便客户端可以进行批次处理,json类型的输出并非是一个完整的json数组,而是一行一条json(无[],按\n\分割)

  2. /sql/export接口输出,因为可以支撑大数据量,接口response为 流式输出。如果是通过程序来调用,那么建议:

    • 避免一次性加载response到内存中,改为流式接收 response body

    • Http Connection 需要增加SocketTimeout时长,如果下载过程出现504 网关超时,则需要修改nginx 超时配置

2.4 接口调用示例

导出日期为20200214的所有事件数据,输出写入到output.json 文件中

2.5 Java HttpClient 接口调用示例

最后更新于

这有帮助吗?