摘要:
通过上述介绍,我们对 Big SQL 的体系结构、工作原理、技术特点有了一个基本的了解,对如何使用 Big
SQL 创建、加载并访问 Hive、HBbase 表也有了一个比较全面的了解,另外,我们还介绍了 Big
SQL 查询优化的各种方 ...
我们知道,随着数据规模爆炸式的增长、数据种类不断翻新以及数据处理速度不断加快,大数据处理技术及平台应运而生。大数据处理平台为我们更好地综合利用结构化、半结构化、非结构化数据、流数据以及海量数据进行分析提供了坚实的基础。大数据处理平台主要包括用于静态大数据分析的
Hadoop 平台以及用于流数据处理的流处理平台。Hadoop 大数据处理平台以 Apache Hadoop
为基础,并存在不同的发行版本。
IBM InfoSphere BigInsights 是 IBM 的 Hadoop
大数据处理平台,它以 Apache Hadoop 为基础,并增加了大数据处理平台的企业特性,包括集成的安装、管理、开发工具,NameNode、Job
Tracker 等组件的高可用,安全性增强,性能的增强,Map/Reduce 处理框架的增强,使用标准的
SQL 访问大数据以及与现有基础设施和大数据流计算技术无缝的集成等,另外,IBM InfoSphere
BigInsights 还提供了文本分析、机器学习、数据挖掘、可视化分析等大数据分析能力。
目前,Hadoop 大数据处理技术在互联网企业已经得到了广泛的应用,银行、电信及政府等行业用户也开始逐渐采用大数据处理技术。从大数据应用场景角度来看,数据仓库增强是
Hadoop 大数据应用处理的一个非常重要的使用场景。我们知道,数据仓库系统通常会采用高端服务器、高端存储来提供海量数据存储及高效数据处理能力,随着大数据时代到来,数据规模呈爆炸式增长,数据仓库存储及处理成本也会极具增长,为了降低成本,我们可以将数据仓库中的海量历史数据卸载到
Hadoop 平台,利用 Hadoop 平台低廉的成本及 Map/Reduce 并行处理能力提供历史数据的查询、分析能力,并利用传统的数据仓库系统高效处理在线数据。
在大数据技术推广、使用过程中,一个很大的挑战就是如何使用目前企业用户广泛使用的标准
SQL 来访问基于 Hadoop 平台的大数据,使用企业原有应用来访问大数据,特别是数据仓库增强使用场景,我们处理的数据还主要是海量的结构化数据,我们仍然需要使用标准的
SQL 并使用企业原有的程序来访问大数据。目前,使用大数据技术,通常使用 Hive、Pig 及 Java
程序来访问 Hadoop 大数据,需要用户学习新的编程语言,改写企业原有的应用,尽管 Hive QL 提供了
SQL 接口,但它只支持标准 SQL 的子集,不能完全满足应用的需求,为了解决上述问题,IBM 推出了
Big SQL,它使用标准的 SQL 来访问基于 Hadoop 平台的 InfoSphere BigInsights,并提供标准的
JDBC、ODBC 接口,可以使广大熟悉 SQL 的用户直接访问大数据,而且,从性能优化角度,Big SQL
提供本地查询及 Map Reduce 两种运行模式,对小规模数据,采用本地查询方式减少 Map Reduce
的运行开销,提高执行效率,对大规模数据,自动采用 Map Reduce 方式高效运行。
Big SQL 概述
Big SQL 是 IBM 基于 Hadoop 平台 InfoSphere
BigInsights 的 SQL 接口,它提供标准的 ANSI SQL 92 标准,允许 SQL 开发人员能够轻松地掌握对
Hadoop 管理的数据的查询。它使数据管理员能够为 Hive、HBase 或他们的 BigInsights
分布式文件系统中存储的数据创建新表。此外,LOAD 命令使管理员能够在 Big SQL 表中填入来自各种来源的数据。此外,Big
SQL 提供标准的 JDBC 和 ODBC 驱动程序,可以使许多现有的工具使用 Big SQL 查询分布式数据。这些都解决了
Hive 存在的一些局限,目前,Hive 仅支持 ANSI SQL 的子集,它不支持子查询、窗口函数,仅支持
ANSI JOIN 语法,对数据类型的支持也有局限,目前不支持 varchar、Decimal 数据类型,另外,它对标准的
JDBC 及 ODBC 驱动程序的支持也有局限性。通过使用 Big SQL,可以使广大熟悉 SQL 的用户直接访问大数据。
从性能优化角度,Big SQL 提供 Big SQL 服务器本地查询及
Map Reduce 两种运行模式,对于小数据集或获取与一个特定 HBase 行键关联的数据的查询,通常会在单个节点上顺序执行,减少
Map Reduce 的运行开销,提高执行效率,对大规模数据,自动采用 Map Reduce 方式高效运行。
除此之外,Big SQL 还针对 HBase 处理提供了增强。通过使用
Big SQL,用户不需要使用像 Hive 那样复杂的语句来创建 HBase 表,可以支持创建组合行健、组合字段,可以为
HBase 表创建辅助索引,可以使用 LOAD、insert 语句为 HBase 表装载数据,可以指定压缩方法等。
Big SQL 体系结构
如下图所示,Big SQL 同 Hive 共享元数据定义信息,它通过 Hcatalog
访问 Hive metastore,在 InfoSphere BigInsights 中,Hive metastore
默认采用 Derby 数据库。因此,Big SQL 中的定义的表可以和 Hive 中定义的表互相访问,默认情况下,Big
SQL 中创建的表即使 Hive 表。
外部应用通过标准的 JDBC/ODBC 驱动程序访问 Big SQL,Big
SQL 的 SQL 查询引擎负责对输入的 SQL 语句进行编译,生成执行计划。它可以通过改写相关的 SQL
语句来提高查询性能,如将子查询改写成表连接操作,并可以通过 SQL 优化提示及配置选项,改变数据访问策略。根据查询的性质、数据量和其他因素,Big
SQL 可以使用 Hadoop 的 MapReduce 框架并行处理各种查询任务,或者在单个节点上的 Big
SQL 服务器上本地执行您的查询, 也可以部分查询工作在 Hadoop 的 MapReduce 框架上完成,部分查询工作在
Big SQL 服务器上完成。
Big SQL 通过 Hive 存储引擎来读写数据。SQL 查询引擎可以根据不同的数据类型,选择不同的存储管理程序装载不同的数据处理类来读取数据。Big
SQL 支持 Delimited files、Sequence files、RC files、Custom、Partitioned
tables 等多种数据格式,同时支持 Hive SerDe 提供的各种编码方式,包括 Text、Binary、Avro、Thrift、JSON、Custom。Big
SQL 还提供了自己专有的 HBase 存储管理程序,针对 HBase 处理提供了很多增强功能,包括支持字符或二进制不同的编码方式、支持组合行健及组合字段、可以为
HBase 表创建辅助索引等。
图 1. Big SQL 架构
使用 Big SQL
启动 Big SQL 服务
我们需要启动 Big SQL 服务来访问 Big SQL。如下所示,我们以管理员身份
(biadmin) 登录系统,并使用如下命令启动、停止及查询 Big SQL 服务:
清单 1. 启动 Big SQL 服务
biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGSQL_HOME/bin/bigsql stop BigSQL pid 2850313 stopped. biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGSQL_HOME/bin/bigsql start BigSQL running, pid 2893219. biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGSQL_HOME/bin/bigsql status BigSQL server is running (pid 2893219)
biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGSQL_HOME/bin/bigsql level IBM BigInsights Big SQL Server Version number is "V2.1.0.1 and level identifier is "20130821". |
我们也可以使用 BigInsights 本身的集成管理命令来启动、停止及查询
Big SQL 服务,如下所示:
清单 2. 使用集成管理命令启动 Big SQL 服务
biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGINSIGHTS_HOME/bin/stop.sh bigsql biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGINSIGHTS_HOME/bin/start.sh bigsql biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGINSIGHTS_HOME/bin/status.sh bigsql |
我们还可以使用 BigInsights 本身的集成管理命令来启动 BigInsights
的所有服务,包括 Big SQL 服务,如下所示:
清单 3. 启动 BigInsights 的所有服务
biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGINSIGHTS_HOME/bin/stop-all.sh biadmin@imtebi1:/opt/ibm/biginsights/bin> $BIGINSIGHTS_HOME/bin/start-all.sh |
另外,我们还可以通过 BigInsights 提供的 Web Console
管理工具来启动、停止及查询 Big SQL 服务,如下所示:我们通过执行 http://172.16.42.202:8080/
来启动 BigInsights Console,并选择 Cluster Status 菜单。
图 2. 使用 Web Console 管理
Big SQL 服务
访问 Big SQL
BigInsights 提供多种工具访问 Big SQL,包括:
1.JSqsh 命令行方式
2.BigInsights console 管理工具
3.Big SQL Eclipse plugin
4.通用的 JDBC/ODBC 管理工具
5.JDBC/ODBC 应用程序
使用命令行访问 Big SQL
BigInsights 提供一个开源 JDBC 命令行工具 JSqsh
来访问 Big SQL,我们可以执行如下命令来启动 jsqsh 并执行 SQL 查询 ,如下所示:
清单 4. 启动 jsqsh 并执行 SQL 查询
biadmin@imtebi1:/opt/ibm/biginsights/bigsql>$BIGSQL_HOME/bin/jsqsh --user=biadmin --password=password --server localhost --port 7052 --driver=bigsql
JSqsh Release 1.5-ibm, Copyright (C) 2007-2013, Scott C. Gray Type \help for available help topics. Using JLine. [localhost][biadmin] 1> select * from hbase_staff; |
我们也可以使用如下命令来运行 Big SQL 脚本,如下所示:
清单 5. 运行 Big SQL 脚本
biadmin@imtebi1:/opt/ibm/biginsights/bigsql/samples/queries> $BIGSQL_HOME/bin/jsqsh --user=biadmin --password=password --server localhost --port 7052 --driver=bigsql -i GOSALESDW_starSchemaJoin.sql |
另外,我们还可以使用 jsqsh – setup 命令定义自己的连接环境,如下所示:
清单 6. 定义自己的连接环境
biadmin@imtebi1:/opt/ibm/biginsights/bigsql/bin> ./jsqsh --setup |
图 3. 使用 jsqsh – setup
命令定义连接环境
这样,我们可以使用定义的连接串进入自己的连接环境,如下所示:
清单 7. 连接自己的环境
biadmin@imtebi1:/opt/ibm/biginsights/bigsql/bin> ./jsqsh mybigsql |
使用 Web Console 访问 Big SQL
我们可以通过 BigInsights 提供的 Web Console 管理工具来访问
Big SQL,如下所示:我们通过执行 http://172.16.42.202:8080/ 来启动 BigInsights
Console,并选择 Quick Links 中的 Run Big SQL Queries 菜单来运行
Big SQL 查询语句。
图 4. 使用 Web Console 运行
Big SQL 查询
使用 Eclipse 工具访问 Big SQL
首先,通过执行 http://172.16.42.202:8080/ 来启动
BigInsights Console,并选择 Quick Links 中的 Download the
Big SQL Client drivers 来下载 Big SQL client drivers,然后通过执行
/usr/local/eclipse/eclipse/eclipse 命令打开 BigInsights
Eclipse 开发工具,选择 Windows 菜单下的 Preferences 菜单,通过选择 Data
Management 选项下的 Connectivity->Driver Definitions
来设置 Big SQL Driver,如下所示:
图 5. 为 Eclipse 工具设置 Big
SQL Driver
之后,在 BigInsights Eclipse 开发工具中,打开 Database
Development Perspective,在 Data Source Explorer 视图中,选择
Database Connections 选项,点击右键创建 Big SQL JDBC 数据库连接概要,如下图所示:
图 6. 为 Eclipse 工具创建 Big
SQL JDBC 数据库连接概要
之后,我们可以通过创建 BigInsights Project 以及创建
SQL Script 来创建并运行 GOSALESDW_Counts.sql 语句,如下所示:
图 7. 使用 Eclipse 工具运行
Big SQL 查询
使用 Db Visualizer 等 JDBC/ODBC 工具访问 Big
SQL
Big SQL 提供标准的 JDBC/ODBC 驱动程序,允许所有支持标准
JDBC/ODBC 的工具访问 BigInsights Hadoop 大数据,这也是 Big SQL 相比
Hive 等大数据查询语言的优势之一。我们以常见的 Db Visualizer 工具为例,首先,我们通过选择
Tools 菜单下的 Driver Manager 菜单来定义 Big SQL Driver,如下所示:
图 8. 为 Db Visualizer
定义 Big SQL Driver
之后,在 Database 标签下,选择 Connections 选项,点击右键创建
BigSQL 数据库连接,如下所示,连接数据库,并选择 File 菜单下的 New SQL Commander
菜单创建并运行 Big SQL 查询。
图 9. 使用 Db Visualizer
运行 Big SQL 查询
使用 JDBC/ODBC 程序访问 Big SQL
我们可以使用 JDBC/ODBC 程序来访问 Big SQL,我们以 JDBC
程序为例,详细介绍了使用 JDBC 访问 Big SQL 的具体方法。
首先,我们需要在 CLASSPATH 环境变量中增加 bigsql-jdbc-driver.jar 文件,如下所示:
清单 8. 增加 CLASSPATH 环境变量
biadmin@imtebi1:/opt/ibm/biginsights/bigsql/samples/queries> export CLASSPATH=$CLASSPATH:/opt/ibm/biginsights/bigsql/samples/queries/bigsql-jdbc-driver.jar |
并创建 countbrand.java 程序,如下所示:
清单 9. countbrand.java 程序
countbrand.java
import java.io.*; import java.sql.*; import java.util.*; class countbrand { public static void main(String args[]) throws SQLException,Exception { try { //load the driver class Class.forName("com.ibm.biginsights.bigsql.jdbc.BigSQLDriver"); } catch (ClassNotFoundException e) { System.out.print(e); } try { //set connection properties String user="biadmin"; String password="password"; Connection con = DriverManager.getConnection("jdbc:bigsql://172.16.42.202:7052/gosalesdw", user,password); Statement st = con.createStatement(); //query execution ResultSet rs = st.executeQuery("SELECT count(*) FROM GOSALESDW.GO_BRANCH_DIM AS BD, GOSALESDW.DIST_INVENTORY_FACT AS IF WHERE IF.BRANCH_KEY
= BD.BRANCH_KEY /*+ joinMethod = 'mapSideHash', buildTable = 'bd' +*/ AND BD.BRANCH_CODE > 20"); while(rs.next()) { System.out.println(rs.getString(1)); } } catch(SQLException sqle) { System.out.print(sqle); } } } |
我们可以使用如下命令编译并运行 countbrand.java 程序,如下所示:
清单 10. 编译并运行 countbrand.java 程序
biadmin@imtebi1:/opt/ibm/biginsights/bigsql/samples/queries> javac countbrand.java biadmin@imtebi1:/opt/ibm/biginsights/bigsql/samples/queries> java countbrand 33318 |
创建、加载表
同关系数据库一样,Big SQL 也存在模式。模式是指一组对象的集合,我们可以通过创建不同的模式来组织
Big SQL 中的数据对象。如下所示,我们创建 gosalesdw 模式来组织我们需要创建的 Hive
及 HBase 表。
清单 11. 创建 gosalesdw 模式
biadmin@imtebi1:/opt/> $BIGSQL_HOME/bin/jsqsh -U biadmin -P password JSqsh Release 1.5-ibm, Copyright (C) 2007-2013, Scott C. Gray Type \help for available help topics. Using JLine. [localhost][biadmin] 1> create schema if not exists gosalesdw; 0 rows affected (total: 1m4.56s) [localhost][biadmin] 1> quit; biadmin@imtebi1:/opt/$HADOOP_HOME/bin/hadoop fs -ls /biginsights/hive/warehouse drwxr-xr-x - biadmin biadmgrp 0 2013-12-21 21:20 /biginsights/hive/warehouse/gosalesdw.db |
在 Big SQL 中,我们创建的模式会在 DFS 分布式文件系统中创建一个相应的目录,该目录可以在创建模式时指定,如果没有指定目录,会在
Hive 的默认目录 /biginsights/hive/warehouse/ 下创建。我们可以通过修改
$HIVE_HOME/conf/hive-site.xml 文件中的 hive.metastore.warehouse.dir
属性值来修改 Hive 的默认存储路径,如下所示:
清单 12. 修改 hive-site.xml
biadmin@imtebi1:/opt/> $BIGSQL_HOME/bin/jsqsh -U biadmin -P password JSqsh Release 1.5-ibm, Copyright (C) 2007-2013, Scott C. Gray Type \help for available help topics. Using JLine. [localhost][biadmin] 1> create schema if not exists gosalesdw1 location '/usr/biadmin/gosalesdw1.db'; 0 rows affected (total: 0.87s) [localhost][biadmin] 1> quit
biadmin@imtebi1:/opt/> $HADOOP_HOME/bin/hadoop fs -ls /usr/biadmin Found 1 items drwxr-xr-x - biadmin supergroup 0 2013-12-21 21:26 /usr/biadmin/gosalesdw1.db
more $HIVE_HOME/conf/hive-site.xml
hive.metastore.warehouse.dir /biginsights/hive/warehouse |
同样,我们创建的每一张表,也会在 DFS 分布式文件系统对应的模式目录下创建一个子目录,向表中装载数据,则会在该子目录下创建一个或多个数据文件,如下所示:
清单 13. DFS 文件系统目录
biadmin@imtebi1:/opt/ibm/biginsights> $HADOOP_HOME/bin/hadoop fs -ls /biginsights/hive/warehouse/gosalesdw.db
drwxr-xr-x - biadmin supergroup 0 2013-12-13 23:45 /biginsights/hive/warehouse/gosalesdw.db/sls_order_method_dim
drwxr-xr-x - biadmin supergroup 0 2013-12-13 23:46 /biginsights/hive/warehouse/gosalesdw.db/sls_product_dim drwxr-xr-x - biadmin supergroup 0 2013-12-13 23:47 /biginsights/hive/warehouse/gosalesdw.db/sls_sales_fact
biadmin@imtebi1:/opt/ibm/biginsights> $HADOOP_HOME/bin/hadoop fs -ls /biginsights/hive/warehouse/gosalesdw.db/sls_sales_fact Found 1 items -rw-r--r-- 1 biadmin supergroup 51258157 2013-12-13 23:47 /biginsights/hive/warehouse/gosalesdw.db/sls_sales_fact/GOSALESDW.SLS_SALES_FACT.txt |
Big SQL 支持 tinyint、smallint、integer、bigint
整数类型,也支持 float、double、real 浮点类型及 decimal 类型,string、varchar()、char()、binary、varbinary()
字符类型、timestamp 时间类型以及 boolean 布尔类型,其中 tinyint 和 smallint
是等价的,real 和 float 是等价的。另外,Big SQL 也支持 array 数组及 struct
结构复杂数据类型。目前,Big SQL 不支持大对象和 VARGRAPHIC 类型。
Big SQL 不直接指定各个数据类型的具体存储格式,而是由 SerDe
来决定。如果没有特别指定,Big SQL 使用 Hive 默认的 LazySimpleSerDe 及 LazyBinarySerDeSerDe
SerDe 定义。由此可见,Big SQL 同 Hive 共享数据。
在 Big SQL 中,创建表主要涉及创建 Hive 表及 HBase
表两种形式,下边我们将具体介绍一下两种创建表及装载表的具体方法。
创建、加载 Hive 表
创建 Hive 表
在 Big SQL 中,没有特别指定,所创建的表默认都是 Hive 表,如下所示,我们创建了
SLS_SALES_FACT、SLS_SALES_ORDER_DIM、SLS_ORDER_METHOD_DIM
三张 Hive 表:
清单 14. 创建 Hive 表
USE GOSALESDW; CREATE TABLE SLS_SALES_FACT ( ORDER_DAY_KEY int, ORGANIZATION_KEY int, EMPLOYEE_KEY int, RETAILER_KEY int, RETAILER_SITE_KEY int, PRODUCT_KEY int, PROMOTION_KEY int, ORDER_METHOD_KEY int, SALES_ORDER_KEY int, SHIP_DAY_KEY int, CLOSE_DAY_KEY int, QUANTITY int, UNIT_COST decimal(19,2), UNIT_PRICE decimal(19,2), UNIT_SALE_PRICE decimal(19,2), GROSS_MARGIN double, SALE_TOTAL decimal(19,2), GROSS_PROFIT decimal(19,2) )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
CREATE TABLE SLS_SALES_ORDER_DIM ( SALES_ORDER_KEY int, ORDER_DETAIL_CODE int, ORDER_NUMBER int, WAREHOUSE_BRANCH_CODE int ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
--GOSALESDW.SLS_ORDER_METHOD_DIM CREATE TABLE SLS_ORDER_METHOD_DIM ( ORDER_METHOD_KEY int, ORDER_METHOD_CODE int, ORDER_METHOD_EN varchar(180), ORDER_METHOD_DE varchar(180), ORDER_METHOD_FR varchar(180), ORDER_METHOD_JA varchar(180), ORDER_METHOD_CS varchar(180), ORDER_METHOD_DA varchar(180), ORDER_METHOD_EL varchar(180), ORDER_METHOD_ES varchar(180), ORDER_METHOD_FI varchar(180), ORDER_METHOD_HU varchar(180), ORDER_METHOD_ID varchar(180), ORDER_METHOD_IT varchar(180), ORDER_METHOD_KO varchar(180), ORDER_METHOD_MS varchar(180), ORDER_METHOD_NL varchar(180), ORDER_METHOD_NO varchar(180), ORDER_METHOD_PL varchar(180), ORDER_METHOD_PT varchar(180), ORDER_METHOD_RU varchar(180), ORDER_METHOD_SC varchar(180), ORDER_METHOD_SV varchar(180), ORDER_METHOD_TC varchar(180), ORDER_METHOD_TH varchar(180) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; |
上述命令将在 /biginsights/hive/warehouse/gosalesdw.db
目录下创建 sls_sales_fact、sls_sales_order_dim、sls_order_method_dim
三个目录。
我们还可以利用 DFS 文件系统上已经存在的数据文件来创建外部 Hive
表,它将利用已经存在的数据,而仅是在 Hive MetaStore 中增加相应的元数据定义信息,当删除该表后,也仅是将该表的元数据定义信息删除,数据文件保持不变,如下所示:
清单 15. 创建外部 Hive 表
use gosalesdw; CREATE EXTERNAL TABLE SLS_PRODUCT_DIM_EXT ( PRODUCT_KEY int, PRODUCT_LINE_CODE int, PRODUCT_TYPE_KEY int, PRODUCT_TYPE_CODE int, PRODUCT_NUMBER int, BASE_PRODUCT_KEY int, BASE_PRODUCT_NUMBER int, PRODUCT_COLOR_CODE int, PRODUCT_SIZE_CODE int, PRODUCT_BRAND_KEY int, PRODUCT_BRAND_CODE int, PRODUCT_IMAGE varchar(120), INTRODUCTION_DATE timestamp, DISCONTINUED_DATE timestamp ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' stored as textfile location '/biginsights/hive/warehouse/gosalesdw.db/sls_product_dim'; |
在创建表时,我们还可以定义优化提示信息,如下所示,我们创建了 SLS_PRODUCT_DIM_1
表,并指定该表的优化提示为 tablesize='small',提示该表是一张小表,这样,对该表的操作可能就会在本地运行,避免
Map Reduce 运行的开销;当和其他表连接操作时,可能会采用 mapSideHash 访问方式。
清单 16. 定义优化提示信息
use gosalesdw; CREATE TABLE SLS_PRODUCT_DIM_1( PRODUCT_KEY int, PRODUCT_LINE_CODE int, PRODUCT_TYPE_KEY int, PRODUCT_TYPE_CODE int, PRODUCT_NUMBER int, BASE_PRODUCT_KEY int, BASE_PRODUCT_NUMBER int, PRODUCT_COLOR_CODE int, PRODUCT_SIZE_CODE int, PRODUCT_BRAND_KEY int, PRODUCT_BRAND_CODE int, PRODUCT_IMAGE varchar(120), INTRODUCTION_DATE timestamp, DISCONTINUED_DATE timestamp ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' stored as textfile with hints (tablesize='small') ; |
为了进一步提高查询的效率,我们还可以创建分区表。采用分区表,一方面,我们可以通过采用
partition elimination 技术忽略掉不需要的分区来减少数据的处理量、提高查询效率,另一方面,可以对每一个分区进行管理,如删除旧的分区,提高管理的灵活性。同时,采用表分区的方式,也会导致生成过多的文件,HCatalog
要管理大量的分区信息。如下所示,我们创建了 SLS_PRODUCT_DIM_PART 分区表:
清单 17. 创建分区表
use gosalesdw; CREATE TABLE SLS_PRODUCT_DIM_PART( PRODUCT_KEY int, PRODUCT_TYPE_KEY int, PRODUCT_TYPE_CODE int, PRODUCT_NUMBER int, BASE_PRODUCT_KEY int, BASE_PRODUCT_NUMBER int, PRODUCT_COLOR_CODE int, PRODUCT_SIZE_CODE int, PRODUCT_BRAND_KEY int, PRODUCT_BRAND_CODE int, PRODUCT_IMAGE varchar(120), INTRODUCTION_DATE timestamp, DISCONTINUED_DATE timestamp )PARTITIONED BY (PRODUCT_LINE_CODE int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
biadmin@imtebi1:/opt/ibm/biginsights/bin> hadoop fs -ls /biginsights/hive/warehouse/gosalesdw.db Found 70 items drwxr-xr-x - biadmin biadmgrp 0 2013-12-15 07:47 /biginsights/hive/warehouse/gosalesdw.db/sls_product_dim_part |
|