跳转至

Vertica 和 Data-Planet Web Service:技术探索

关于本文档

本文档解释如何使用 Data-Planet Web Services 将公共数据包含到 Vertica 分析数据库中。可以从 Data-Planet 仓库提取第三方数据集,如人口普查、金融和交通数据。可以将这些数据集加载到 Vertica 中以改进数据库分析。

Data-Planet 概述

Data-Planet 是一个 Web 服务 (SaaS),提供对各种组织的数据集仓库的访问。仓库中的数据按时间顺序组织和结构化,也称为时间序列数据。这种按时间组织的结构允许用户比较和对比不同来源的数据,并运行可视化以解释相关性。仓库中的数据随着新数据集的添加而定期增长。Data-Planet 在源端信息变化时保持数据更新。

我们测试了在云端将 Data-Planet 数据集加载到 Vertica 7.2.x 中。

请求 Data-Planet

Data Planet 产品和服务可通过 SAGE Publishing 获取。要请求演示或试用 Data-Planet,请联系 SAGE:访问 Data-Planet 网站,点击 Contact Us。

在 Vertica 中使用 Data-Planet 数据集

本文档讨论在 Vertica 中使用 Data-Planet 数据集进行分析的两个主要用例:

使用 Data-Planet 托管服务

将 Vertica 数据托管在 Data-Planet 仓库中。然后使用 Data-Planet 界面将您的数据与统计数据集集合进行比较和关联。Data-Planet 团队将与您合作将数据加载到仓库中,并在数据集级别控制对信息的访问,确保只有您组织中的人员可以看到数据。

包含 Data-Planet 数据集

将公共数据包含到 Vertica 分析中,将数据集从 Data-Planet 仓库导出为 JSON 和 CSV 格式。然后将这些数据集导入到 Vertica 数据库中。

从 Data-Planet 导出数据到 Vertica 有两种方式: 1. 使用 Data-Planet 用户界面导出数据集 2. 使用 Data-Planet REST API 导出数据集

Data-Planet 数据集可以导出为 Excel、CSV、XML 和 JSON 格式。推荐使用 CSV 或 JSON 格式,原因如下:

  • JSON 格式的数据可以使用 COPY 命令和 JSON 解析器 (fjsonparser) 加载到列式表或 flex 表中
  • CSV 格式的数据可以使用 CSV 解析器 (fcsvparser) 加载
  • Vertica 不能直接使用 COPY 命令加载 XML 文件,也没有 XML 格式的解析器

使用 Data-Planet 用户界面导出数据集

Data-Planet 用户界面允许从数据集之间的关联下载结果集。要下载 Excel、CSV 或 XML 格式的聚合数据,点击 Data-Planet 界面上的 Export 图标。推荐以 CSV 格式下载结果集。

注:Vertica 不能直接使用 COPY 命令加载 XML 文件。如果有 XML 文件,必须使用应用程序将其转换为 JSON 或 CSV 格式。

使用 Data-Planet REST API 导出数据集

Data-Planet REST API 允许导出 Data-Planet 仓库中包含的数据集。也可以下载数据集的数据子集和描述数据集的元数据。可以使用 REST API 以 XML 或 JSON 格式导出数据。推荐使用 JSON 格式。注意 REST API 不支持将数据摄取到仓库中。

使用 REST API 导出数据集时的注意事项:

  • 评估版本的最大记录数为 1000。如果需要更多记录,必须联系 Data-Planet 团队请求增加
  • 一次 API 调用只能访问一个指标的数据
  • API 调用不能用于导出数据集之间的关联
  • 如果 API 索引未更新,通过 API 看到的数据可能与用户界面中的数据不匹配

Data-Planet 有三个 REST API 调用可用:

  • Database API Call:识别仓库中数据集和文档的元数据信息
  • Dataset API Call:基于输入的文本搜索整个仓库中的数据集和文档
  • Data API Call:从仓库中的数据集中提取数据子集

参数总结

通用请求和查询参数

参数 描述
q 搜索的主查询,支持原始输入字符串。引号括起的文本被视为短语
start 分页结果,第一条记录偏移量为 0
rows 请求返回的最大文档数,最大支持 1000
fl 字段列表,指定要返回的字段集。用空格、逗号或 + 分隔,* 表示所有字段
wt 输出格式,XML 或 JSON,默认为 XML
defType 指定查询解析器处理查询的方式

Facet 参数

设置 facet=true 可启用 facet 计数:

参数 描述
facet.field 被视为 facet 以生成计数的字段,可指定多个
facet.mincount 响应中包含的 facet 字段的最小计数,默认为 0
facet.limit 返回的 facet 字段的最大约束数,负值表示无限,默认为 100

Extended DisMax (eDisMax) 查询解析器参数

参数 描述
q 查询的原始输入字符串
qf 查询字段参数,指定要执行查询的索引字段
df 默认字段参数,覆盖 SchemaXML 中定义的默认字段

Data API 调用

数据网络服务调用以 XML 或 JSON 格式返回 Data-Planet 仓库中的数据子集。XML 是默认格式,但推荐与 Vertica 配合使用 JSON。至少需要以下参数:

  • database_id:仓库中数据集的唯一代码
  • datetype_id:结果中使用的日期类型
  • geo_id:结果中使用的数据层次组织

将 Data-Planet 数据集加载到 Vertica

使用 Flex Tables 导入

Vertica flex tables 功能允许加载数据而无需定义列或 schema。Flex tables 支持 SQL 查询和内置分析,与常规表一样。

JSON 数据加载示例

  1. 使用 database API 调用导出元数据,保存为 AirlineOnTimeMetadata.json。
  2. 使用 data API 调用导出数据子集,保存为 AirlineOnTimeData.json。
  3. 创建 flex 表:
    => CREATE FLEX TABLE DataPlanet.AirlineOnTimeMetadata();
    => CREATE FLEX TABLE DataPlanet.AirlineOnTimeData();
    
  4. 使用 fjsonparser 加载元数据:
    => COPY DataPlanet.AirlineOnTimeMetadata FROM '/home/dbadmin/data/flex/AirlineOnTimeMetadata.json'
       PARSER fjsonparser(flatten_arrays=TRUE, start_point='docs', reject_on_duplicate=true);
    
  5. 加载数据:
    => COPY DataPlanet.AirlineOnTimeData FROM '/home/dbadmin/data/flex/AirlineOnTimeData.json'
       PARSER fjsonparser(flatten_arrays=TRUE, start_point='row', reject_on_duplicate=true);
    
  6. 查询元数据中的列:
    => SELECT source, database_id, database_name, "datatype_name.0" FROM DataPlanet.AirlineOnTimeMetadata;
    
  7. 关联查询数据和元数据,查询各航空公司月度准点率:
    => SELECT data.database_id, metadata.database_name, data.geo_name Airline, 
              data.datedata YearMonth, SUM(data."value._text")
       FROM DataPlanet.AirlineOnTimeData data
       JOIN DataPlanet.AirlineOnTimeMetadata metadata ON (data.database_id = metadata.database_id)
       GROUP BY 1,2,3,4 ORDER BY 1;
    
  8. 使用 COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW 填充 _keys 和 _view 表:
    => SELECT COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW('DataPlanet.AirlineOnTimeMetadata'),
              COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW('DataPlanet.AirlineOnTimeData');
    
  9. 查询 flex table 视图:
    => SELECT * FROM DataPlanet.AirlineOnTimeMetadata_view;
    => SELECT * FROM DataPlanet.AirlineOnTimeData_view;
    

CSV 数据加载示例

  1. 创建 flex 表:
    => CREATE FLEX TABLE DataPlanet.AirlineOnTimeCSV();
    
  2. 使用 fcsvparser 加载(遵循 RCF4180 标准 CSV 格式,逗号分隔,双引号括起):
    => COPY DataPlanet.AirlineOnTimeCSV FROM '/home/dbadmin/data/flex/AirlineOnTimeCSV.csv'
       PARSER fcsvparser(reject_on_duplicate=true);
    
  3. 使用 fdelimitedparser 加载(需要先去除 CSV 文件中的双引号):
    => COPY DataPlanet.AirlineOnTimeCSV FROM '/home/dbadmin/data/flex/AirlineOnTimeCSV.csv'
       PARSER fdelimitedparser(delimiter=',', reject_on_duplicate=true);
    

使用 COPY 语句导入

SQL COPY 语句从存储在节点上的文件批量加载数据到数据库。也可以使用 COPY LOCAL 选项从客户端文件流式传输数据。

服务器端 COPY 示例:

=> COPY dataplanet.AirlineOnTimeTest FROM '/home/dbadmin/data/AirlineOnTimeData.csv'
   SKIP 1 DELIMITER ',' ENCLOSED BY '"'
   REJECTED DATA '/home/dbadmin/data/REJECTIONS'
   EXCEPTIONS '/home/dbadmin/data/EXCEPTIONS' DIRECT;

使用 fcsvparser:

=> COPY dataplanet.AirlineOnTimeTest FROM '/home/dbadmin/data/AirlineOnTimeData.csv'
   PARSER fcsvparser(reject_on_duplicate=true);

使用 fjsonparser:

=> COPY dataplanet.AirlineOnTimeTest FROM '/home/dbadmin/data/AirlineOnTimeData.json'
   PARSER fjsonparser(flatten_arrays=TRUE, start_point='row', reject_on_duplicate=true);

COPY LOCAL 示例(客户端本地文件):

=> COPY dataplanet.AirlineOnTimeTest FROM LOCAL 'C:\Users\Administrator\Downloads\AirlineOnTimeData.csv'
   SKIP 1 DELIMITER ',' ENCLOSED BY '"'
   REJECTED DATA 'C:\Users\Administrator\Downloads\REJECTIONS'
   EXCEPTIONS 'C:\Users\Administrator\Downloads\EXCEPTIONS' DIRECT;

使用 ETL 工具导入

可以使用与 Vertica 集成的 ETL 工具将数据加载到数据库中。这些产品使用 Vertica JDBC 或 ODBC 驱动程序连接到 Vertica。定义 ETL 流程使用 Data-Planet API 从仓库拉取数据集,然后将输出加载到数据库中。也可以使用 ETL 工具加载 CSV 或 JSON 格式的数据。将工具配置为使用 COPY 语句高效地流式传输数据。连接中的 Vertica 用户必须是超级用户,或具有 schema 的 USAGE 权限和表的 INSERT 权限。


原文来源:https://www.vertica.com/kb/DataPlanet/Content/Partner/DataPlanetWebService.htm