Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用

【摘要】 在Spark SQL中使用CarbonData

【准备CarbonData】

在浏览器地址栏输入以下链接,点击"download"按钮下载已经准备好的CarbonData jar包

链接:https://github.com/QiangCai/carbonjars/blob/master/master/apache-carbondata-2.1.0-SNAPSHOT-bin-spark2.4.5-hadoop2.7.2.jar

或者按以下指南编译carbondata源码

  1. 下载源码

git clone https://github.com/apache/carbondata.git

  2. 编译源码

  参考:https://github.com/apache/carbondata/blob/master/build/README.md

  3. 编译完成后可以在如下目录找到CarbonData包

./assembly/target/scala-2.1x/apache-carbondata*.jar

【准备Spark】

  1. 下载spark 2.4.5

  下载页面:https://spark.apache.org/downloads.html

Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用

  2. 本地启动spark-sql

./bin/spark-sql 
--conf spark.sql.extensions=org.apache.spark.sql.CarbonExtensions 
--jars <CarbonData jar 包路径>

【使用CarbonData】

  1. 创建database 

CREATE DATABASE carbondb location '<指定的database目录>';

  2. 设置为当前database

USE carbondb;

  3. 创建CarbonData表(使用TPC-H lineitem表举例)

  创建lineitem在线商品信息表,在OPTIONS中sort_scope使用global_sort,并将sort_columns设置l_shipdate

  更多相关资料参考:https://github.com/apache/carbondata/blob/master/docs/ddl-of-carbondata.md

CREATE TABLE IF NOT EXISTS lineitem(
  l_orderkey INT,
  l_partkey INT ,
  l_suppkey STRING,
  l_linenumber INT,
  l_quantity DOUBLE,
  l_extendedprice DOUBLE,
  l_discount DOUBLE,
  l_tax DOUBLE,
  l_returnflag STRING,
  l_linestatus STRING,
  l_shipdate DATE,
  l_commitdate DATE,
  l_receiptdate DATE,
  l_shipinstruct STRING,
  l_shipmode STRING,
  l_comment STRING) 
USING carbondata
OPTIONS('sort_scope'='global_sort', 'sort_columns'='l_shipdate');

  4. 入库数据

  支持直接入库TPC-H dbgen生成的CSV格式的数据文件lineitem.tbl

  或者直接使用本文附件中的lineitem.txt文件,包含了1000条样例数据;

  入库期间将使用表属性sort_scope和sort_columns的信息对输入数据进行排序处理。

  更多相关资料参考:https://github.com/apache/carbondata/blob/master/docs/dml-of-carbondata.md

LOAD DATA INPATH 'lineitem.tbl/txt文件路径' INTO TABLE lineitem OPTIONS('delimiter'='|', 'header'='false');

  5. 查询

  TPC-H的query1语句查询指定发货日期之前的定价汇总报告;语句中含有l_shipdate的过滤操作,由于入库时已按该列对数据进行排序,因此查询时在driver侧通过索引能精确定位出含有过滤条件的数据块,减少了扫描的数据块数量。

  另外,carbondata列式存储格式支持push down projection,仅需要扫描语句中使用了的列数据;同时又支持push down filter, 仅需要扫描符合过滤条件的列数据,进一步减少扫描的数据量。

SELECT 
  l_returnflag,
  l_linestatus,
  sum(l_quantity) AS sum_qty,
  sum(l_extendedprice) AS sum_base_price,
  sum(l_extendedprice*(1-l_discount)) AS sum_disc_price,
  sum(l_extendedprice*(1-l_discount)*(1+l_tax)) AS sum_charge,
  avg(l_quantity) AS avg_qty,
  avg(l_extendedprice) AS avg_price,
  avg(l_discount) AS avg_disc,
  count(*) AS count_order
FROM lineitem
WHERE l_shipdate <= date('1993-09-02')
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;

  

Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用 lineitem.txt

点击这里,了解更多精彩内容