gpt4 book ai didi

hive - 如何在 Spark SQL 中表达十六进制文字?

转载 作者:行者123 更新时间:2023-12-05 02:18:49 25 4
gpt4 key购买 nike

我是 Spark SQL 的新手。我搜索了 language manual for Hive/SparkSQL并用谷歌搜索答案,但找不到明显的答案。

在 MySQL 中,我们可以像这样表达一个十六进制文字 0xffff:

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

但是在 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 中执行此操作。

你可以通过查看 ANTLR grammar file 来发现它.在那里,通过 DIGIT 词法分析器规则定义的 number 规则如下所示:

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

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

关于hive - 如何在 Spark SQL 中表达十六进制文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44168374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com