Spark SQL 之 Migration Guide

Spark SQL 之 Migration Guide


支持的Hive功能java

转载请注明出处:http://www.cnblogs.com/BYRans/

sql

Migration Guide

与Hive的兼容(Compatibility with Apache Hive)

Spark SQL与Hive Metastore、SerDes、UDFs相兼容。Spark SQL兼容Hive Metastore从0.12到1.2.1的全部版本。Spark SQL也与Hive SerDes和UDFs相兼容,当前SerDes和UDFs是基于Hive 1.2.1。apache

在Hive warehouse中部署Spark SQL

Spark SQL Thrift JDBC服务与Hive相兼容,在已存在的Hive上部署Spark SQL Thrift服务不须要对已存在的Hive Metastore作任何修改,也不须要对数据作任何改动。数组

Spark SQL支持的Hive特性

Spark SQL支持多部分的Hive特性,例如:ide

  • Hive查询语句,包括:
    • SELECT
    • GROUP BY
    • ORDER BY
    • CLUSTER BY
    • SORT BY
  • 全部Hive运算符,包括
    • 比较操做符(=, ⇔, ==, <>, <, >, >=, <=, etc)
    • 算术运算符(+, -, *, /, %, etc)
    • 逻辑运算符(AND, &&, OR, ||, etc)
    • 复杂类型构造器
    • 数学函数(sign,ln,cos,etc)
    • 字符串函数(instr,length,printf,etc)
  • 用户自定义函数(UDF)
  • 用户自定义聚合函数(UDAF)
  • 用户自定义序列化格式器(SerDes)
  • 窗口函数
  • Joins
    • JOIN
    • {LEFT|RIGHT|FULL} OUTER JOIN
    • LEFT SEMI JOIN
    • CROSS JOIN
  • Unions
  • 子查询
    • SELECT col FROM ( SELECT a + b AS col from t1) t2
  • Sampling
  • Explain
  • 表分区,包括动态分区插入
  • 视图
  • 全部的Hive DDL函数,包括:
    • CREATE TABLE
    • CREATE TABLE AS SELECT
    • ALTER TABLE
  • 大部分的Hive数据类型,包括:
    • TINYINT
    • SMALLINT
    • INT
    • BIGINT
    • BOOLEAN
    • FLOAT
    • DOUBLE
    • STRING
    • BINARY
    • TIMESTAMP
    • DATE
    • ARRAY<>
    • MAP<>
    • STRUCT<>

支持的Hive功能

下面是当前不支持的Hive特性,其中大部分特性在实际的Hive使用中不多用到。函数

Major Hive Featuresoop

  • Tables with buckets:bucket是在一个Hive表分区内进行hash分区。Spark SQL当前不支持。

Esoteric Hive Featurespost

  • UNION type
  • Unique join
  • Column statistics collecting:当期Spark SQL不智齿列信息统计,只支持填充Hive Metastore的sizeInBytes列。

Hive Input/Output Formats优化

  • File format for CLI: 这个功能用于在CLI显示返回结果,Spark SQL只支持TextOutputFormat
  • Hadoop archive

Hive优化
部分Hive优化尚未添加到Spark中。没有添加的Hive优化(好比索引)对Spark SQL这种in-memory计算模型来讲不是特别重要。下列Hive优化将在后续Spark SQL版本中慢慢添加。ui

  • 块级别位图索引和虚拟列(用于创建索引)
  • 自动检测joins和groupbys的reducer数量:当前Spark SQL中须要使用“ SET spark.sql.shuffle.partitions=[num_tasks]; ”控制post-shuffle的并行度,不能自动检测。
  • 仅元数据查询:对于能够经过仅使用元数据就能完成的查询,当前Spark SQL仍是须要启动任务来计算结果。
  • 数据倾斜标记:当前Spark SQL不遵循Hive中的数据倾斜标记
  • jion中STREAMTABLE提示:当前Spark SQL不遵循STREAMTABLE提示
  • 查询结果为多个小文件时合并小文件:若是查询结果包含多个小文件,Hive能合并小文件为几个大文件,避免HDFS metadata溢出。当前Spark SQL不支持这个功能。

Reference

Data Types

Spark SQL和DataFrames支持的数据格式以下:

  • 数值类型
    • ByteType: 表明1字节有符号整数. 数值范围: -128 到 127.
    • ShortType: 表明2字节有符号整数. 数值范围: -32768 到 32767.
    • IntegerType: 表明4字节有符号整数. 数值范围: -2147483648 t到 2147483647.
    • LongType: 表明8字节有符号整数. 数值范围: -9223372036854775808 到 9223372036854775807.
    • FloatType: 表明4字节单精度浮点数。
    • DoubleType: 表明8字节双精度浮点数。
    • DecimalType: 表示任意精度的有符号十进制数。内部使用java.math.BigDecimal.A实现。
    • BigDecimal由一个任意精度的整数非标度值和一个32位的整数组成。
  • String类型
    • StringType: 表示字符串值。
  • Binary类型
    • BinaryType: 表明字节序列值。
  • Boolean类型
    • BooleanType: 表明布尔值。
  • Datetime类型
    • TimestampType: 表明包含的年、月、日、时、分和秒的时间值
    • DateType: 表明包含的年、月、日的日期值
  • 复杂类型
    • ArrayType(elementType, containsNull): 表明包含一系列类型为elementType的元素。若是在一个将ArrayType值的元素能够为空值,containsNull指示是否容许为空。
    • MapType(keyType, valueType, valueContainsNull): 表明一系列键值对的集合。key不容许为空,valueContainsNull指示value是否容许为空
    • StructType(fields): 表明带有一个StructFields(列)描述结构数据。
      • StructField(name, dataType, nullable): 表示StructType中的一个字段。name表示列名、dataType表示数据类型、nullable指示是否容许为空。

Spark SQL全部的数据类型在 org.apache.spark.sql.types 包内。不一样语言访问或建立数据类型方法不同:

  • Scala
    代码中添加 import org.apache.spark.sql.types._,再进行数据类型访问或建立操做。
    scalaAccessDataTypes

  • Java
    可使用 org.apache.spark.sql.types.DataTypes 中的工厂方法,以下表:
    javaAccessDataTypes

相关文章
相关标签/搜索