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

相關文章
相關標籤/搜索