2017-05-24 22 views
0

我是Spark SQL的新手。我搜索了language manual for Hive/SparkSQL並用Google搜索了答案,但找不到明顯的答案。如何在Spark SQL中表示十六進制文字?

在MySQL中,我們可以表達一個十六進制字面0xffff這樣的:

mysql>select 0+0xffff; 
+----------+ 
| 0+0xffff | 
+----------+ 
| 65535 | 
+----------+ 
1 row in set (0.00 sec) 

但在星火SQL(我用的是直線客戶端),我只能做以下其中的數值以十進制數表示不是十六進制。

> select 0+65535; 
+--------------+--+ 
| (0 + 65535) | 
+--------------+--+ 
| 65535  | 
+--------------+--+ 
1 row selected (0.047 seconds) 

如果我做了以下相反,我會得到一個錯誤:

> select 0+0xffff; 
Error: org.apache.spark.sql.AnalysisException: 
cannot resolve '`0xffff`' given input columns: []; line 1 pos 9; 
'Project [unresolvedalias((0 + '0xffff), None)] 
+- OneRowRelation$ (state=,code=0) 

我們如何表達一個十六進制文字的星火SQL?

回答

1

不幸的是,你不能在Spark SQL中做到這一點。

你可以通過查看ANTLR grammar file來發現它。

number 
    : MINUS? DECIMAL_VALUE   #decimalLiteral 
    | MINUS? INTEGER_VALUE   #integerLiteral 
    | MINUS? BIGINT_LITERAL   #bigIntLiteral 
    | MINUS? SMALLINT_LITERAL   #smallIntLiteral 
    | MINUS? TINYINT_LITERAL   #tinyIntLiteral 
    | MINUS? DOUBLE_LITERAL   #doubleLiteral 
    | MINUS? BIGDECIMAL_LITERAL  #bigDecimalLiteral 
    ; 

... 

INTEGER_VALUE 
    : DIGIT+ 
    ; 

... 

fragment DIGIT 
    : [0-9] 
    ; 

它不包含任何十六進制字符,所以你不能使用它們:有,通過DIGIT詞法規則看起來像這樣定義的number規則。

相關問題