Hive 如何在Spark SQL中表示十六进制文字?
我对Spark SQL是新手。我已经搜索了这个网站,并在谷歌上搜索了答案,但没有找到一个明显的答案 在MySQL中,我们可以这样表示十六进制文本0xffff: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
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]
;
它不包含任何十六进制字符,因此不能使用它们