lee*_*wah 4 hive apache-spark-sql
我是 Spark SQL 新手。我搜索了Hive/SparkSQL 的语言手册并用 google 搜索答案,但找不到明显的答案。
0xffff在 MySQL 中,我们可以像这样表达十六进制文字:
mysql>select 0+0xffff;
+----------+
| 0+0xffff |
+----------+
| 65535 |
+----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
但在 Spark SQL 中(我使用的是 beeline 客户端),我只能执行以下操作,其中数值以十进制而不是十六进制表示。
> select 0+65535;
+--------------+--+
| (0 + 65535) |
+--------------+--+
| 65535 |
+--------------+--+
1 row selected (0.047 seconds)
Run Code Online (Sandbox Code Playgroud)
如果我执行以下操作,则会出现错误:
> 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)
Run Code Online (Sandbox Code Playgroud)
我们如何在 Spark SQL 中表达十六进制文字?
不幸的是,您无法在 Spark SQL 中执行此操作。
只需查看ANTLR 语法文件即可发现它。在那里,number通过DIGIT词法分析器规则定义的规则如下所示:
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]
;
Run Code Online (Sandbox Code Playgroud)
它不包含任何十六进制字符,因此您无法使用它们。
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |