利用 Big SQL 支持的数据类型,可以更容易地表示和处理半结构化数据类型。使用本文中包含的代码样例和查询,了解如何使用 Big SQL 的简单和嵌套式复杂数据类型,以及如何在应用程序中创建和实现这些类型。作为一个新增的争议点,了解如何使用 Serializer Deserializer (SerDe) 处理 JSON 数据。
用于 InfoSphere BigInsights、Big SQL 的全新 SQL 界面使得用户可以对 HDFS 和 Apache HBase 中存储的数据进行 SQL 访问。它还可以跨分布式环境提供创建和填充表的能力,并通过执行 SQL 查询从分布式数据中提取信息。Big SQL 支持许多数据类型。
原始数据类型:
Tinyint Smallint Int 或 Integer Bigint Float 或 Real Double Decimal(precision, scale) 或 Numeric(precision, scale) String Varchar(length) 或 Char(length) Boolean Timestamp Binary(length)
复杂数据类型:
array struct
Big SQL 扩展数据类型
除了原始和复杂数据类型外,Big SQL 还支持扩展数据类型,这种类型不适合 Apache Hive。以下各节将介绍这些扩展数据类型。
十进制或数值数据类型
这种数据类型可用于具有精度和范围的十进制值。缩短数据文件中存储的值,使之适合指定的精度和范围。在 Apache Hive 中,通常使用string 数据类型保存这些值。在需要限制精度和范围时,可使用 decimal/numeric 数据类型进行替代。
语法:decimal(precision, scale)
以下示例展示了类型 decimal(10,4) DISCOUNT 一栏,其中 10 和 4 分别是精度和范围。
创建十进制数据类型的表格
[localhost][biadmin] 1> create table PRODUCT (PROD_ID int, DISCOUNT decimal(10,4))[localhost][biadmin] 2> row format delimited[localhost][biadmin] 3> fields terminated by ',';0 rows affected (total: 0.20s)
实际数据类型
real 数据类型与 float 数据类型相同,可用于单精度的浮点值。其行为也与 float 数据类型相同。
语法:real
创建实际数据类型的表格
[localhost][biadmin] 1> create table PRODUCT(PROD_ID int, DISCOUNT real)[localhost][biadmin] 2> row format delimited[localhost][biadmin] 3> fields terminated by ',';0 rows affected (total: 0.26s)
varchar/char 数据类型
这种数据类型适用于可变长度的字符串。缩短数据文件中存储的值,使之适合指定的长度。在 Apache Hive 中,可将这些值视为 string 类型值。在需要限制内容长度时,可使用 varchar/char 数据类型进行替代,因为该数据类型可以指定列中各值的大小限制。
语法:varchar(length) 或 char(length)
创建 varchar 数据类型的表格
[localhost][biadmin] 1> create table product(prod_id int, prod_name varchar(15))[localhost][biadmin] 2> row format delimited[localhost][biadmin] 3> fields terminated by ',';0 rows affected (total: 0.12s)
Big SQL 复杂数据类型
Big SQL 支持复杂数据类型 array 和 struct。这些类型可用于表示具有复杂结构的数据。虽然这些数据类型并没有在 InfoSphere BigInsights 2.1 信息中心中记录,但我还是要在这里介绍一下,以提供有关 Big SQL 支持的复杂数据类型的洞察。
array 数据类型用于定义同类物体的数据结构。Big SQL array 数据类型可在简单格式和嵌套格式中使用。array 类型列中的元素可使用索引 —phone[1] 进行访问,
例如,每个 SQL 标准从 1 开始。 struct 是数据类型 Big SQL 的一种内置数据类型,它包含一系列的属性,每个属性都可以是原始、复杂或嵌套数据类型。自 InfoSphere BigInsights 2.1 起,Big SQL 支持使用数据类型 struct 作为表格中的列类型,或是作为 array 列的子类型。struct 类型列中的元素可以使用圆点 (.) 符号进行访问,例如 address.city。
了解 Big SQL 的复杂数据类型
现在来看一个具体的示例,更详细地了解 Big SQL 复杂数据类型。要想使用 Big SQL,需要配置并启动 Big SQL 服务器,这是 InfoSphere BigInsights 的一个组件。请访问 InfoSphere BigInsights 2.1 信息中心,了解有关安装和配置 Big SQL 的详细信息。在完成安装和配置之后,就可以使用 $BIGSQL_HOME/bin 目录中的实用程序 bigsql 来启动 Big SQL。
启动 Big SQL 服务器
biadmin@bdvm177:~> cd $BIGSQL_HOME/binbiadmin@bdvm177:/opt/ibm/biginsights/bigsql/bin> ./bigsql startBigSQL running, pid 18598.
使用命令行客户端工具 JSqsh 连接到 Big SQL 服务器,该工具可安装在服务器上。JSqsh 是一个通用的 JDBC 客户端工具,可用于使用 JDBC 驱动程序的任何数据源。脚本 jsqsh 位于 $BIGSQL_HOME/bin 目录中。
使用 JDBC 客户端工具 jsqsh 连接到 Big SQL 服务器
biadmin@bdvm177:/opt/ibm/biginsights/bigsql/bin> ./jsqsh -Ubiadmin -Ppassw0rd -dbigsqlCurrent schema context is 'default'JSqsh Release 1.5-ibm, Copyright (C) 2007-2013, Scott C. GrayType \help for available help topics. Using JLine.[localhost][biadmin] 1>
包含复杂数据类型列的表格
例如,想象一下使用在线门户网站 www.xyzshopping.com 的购物车的情形。创建一个名为 SHOPPING 数据库,其中包含两个表格:CUSTOMER_DETAILS 和 ORDER_DETAILS,前者包含具有该门户帐户的客户详细信息,后者包含客户订单信息。参照表 1 和 表 2,了解这些表格的结构。
表 1. 表 CUSTOMER_DETAILS 的结构
列名称 列数据类型 CUSTOMER_ID varchar(15) FIRST_NAME varchar(15) LAST_NAME varchar(20) ADDRESS struct<LINE1:varchar(15), LINE2: varchar(15), POSTAL_CODE:integer, CITY: varchar(20), STATE: varchar(20), COUNTRY: varchar (20), EMAILID: varchar(25)> CONTACT_NUMBER array<integer>
Big SQL 还支持 array 和 struct 数据类型的嵌套。表 ORDER_DETAILS 包含五个列,列 ITEMS 是嵌套列。该列包含一个嵌套在 array 数据类型中的 struct 数据类型。
表 2. 表 ORDER_DETAILS 的结构
列名称 列数据类型 ORDER_ID varchar(15) SHIPPING_ADDRESS struct<LINE1: varchar (15), LINE2: varchar (15), POSTAL_CODE: integer, CITY: varchar (20), STATE: varchar (20), COUNTRY: varchar (20), EMAILID: varchar (25), CONTACT_NUMBER: integer> ITEMS array<struct<ITEM_ID: varchar(20), QUANTITY:integer, PRICE:integer>> ORDER_DATE timestamp CUSTOMER_ID varchar(15)