2017-05-24 4 views
0

Ich bin neu bei Spark SQL. Ich habe die language manual for Hive/SparkSQL gesucht und googelte für die Antwort, konnte aber keine offensichtliche Antwort finden. Wie wird ein Hex-Literal in Spark SQL ausgedrückt?

In MySQL wir einen Hex-wörtliche 0xffff wie folgt ausdrücken:

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

Aber in Spark-SQL (I Beeline-Client verwende), konnte ich nur folgendes tun, wo die numerischen Werte in dezimal ausgedrückt nicht hexadezimal.

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

Wenn ich die folgende Stelle tat, würde ich einen Fehler:

> 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) 

Wie drücken wir ein hex wörtlichen in Spark-SQL?

Antwort

1

Unglücklicherweise können Sie es in Spark SQL nicht tun.

Sie können es nur durch Blick auf die ANTLR grammar file entdecken. Es definiert die number Regel über DIGIT Lexer Regel, die wie folgt aussieht:

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] 
    ; 

Es keine hexadezimalen Zeichen nicht enthalten, so dass man sie nicht verwenden können.

Verwandte Themen