Hive 如何在Spark SQL中表示十六进制文字?

Hive 如何在Spark SQL中表示十六进制文字?,hive,apache-spark-sql,Hive,Apache Spark Sql,我对Spark SQL是新手。我已经搜索了这个网站,并在谷歌上搜索了答案,但没有找到一个明显的答案 在MySQL中,我们可以这样表示十六进制文本0xffff: mysql>select 0+0xffff; +----------+ | 0+0xffff | +----------+ | 65535 | +----------+ 1 row in set (0.00 sec) number : MINUS? DECIMAL_VALUE #decimalLit

我对Spark SQL是新手。我已经搜索了这个网站,并在谷歌上搜索了答案,但没有找到一个明显的答案

在MySQL中,我们可以这样表示十六进制文本0xffff:

mysql>select 0+0xffff;
+----------+
| 0+0xffff |
+----------+
|    65535 |
+----------+
1 row in set (0.00 sec)
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]
  ;
但在Spark 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)

如何在Spark SQL中表示十六进制文字

不幸的是,在Spark SQL中无法实现这一点

你只需看看地图就可以发现它。其中,通过数字词法规则定义的数字规则如下所示:

mysql>select 0+0xffff;
+----------+
| 0+0xffff |
+----------+
|    65535 |
+----------+
1 row in set (0.00 sec)
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]
  ;

它不包含任何十六进制字符,因此您不能使用它们。

不幸的是,您不能在Spark SQL中使用它们

你只需看看地图就可以发现它。其中,通过数字词法规则定义的数字规则如下所示:

mysql>select 0+0xffff;
+----------+
| 0+0xffff |
+----------+
|    65535 |
+----------+
1 row in set (0.00 sec)
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]
  ;
它不包含任何十六进制字符,因此不能使用它们