小编Mar*_*rso的帖子

如何在 Presto 中将数字格式化为保留 2 位小数的百分比?

我有一个数字想在 Presto 中将其格式化为百分比。我想将 0.18932 格式化为 18.93%。

我试过:

format('%s%%', decimal_number*100)
format('%s%%', round((a.decimal_number*100), 2))
Run Code Online (Sandbox Code Playgroud)

这是结果:无格式:0.019435618第一种方法:1.9435618000%第二种方法:1.9400000000%

任何更简单的方法将其格式化为 1.94%

format decimal percentage presto trino

8
推荐指数
1
解决办法
2万
查看次数

SQL presto - 交叉联接解除空值嵌套

我有不同大小的数组,我希望数组中的每个值位于单独的行中。为此,我使用了交叉连接取消嵌套。但是它正在工作,它正在删除空数组。

因此,当我这样做时,我的列 ID 包含不同的数组,其中一些为空

select *
    from table 
    cross join unnest (t.id) as t(order_id)
    where length(order_id) = 5  or order_id is NULL
 
Run Code Online (Sandbox Code Playgroud)

我只得到以下结果

ID 订单号
23deo jfr32 6582w 23deo
23deo jfr32 6582w 杰夫32
23deo jfr32 6582w 6582瓦

而且我要

ID 订单号
23deo jfr32 6582w 23deo
23deo jfr32 6582w 杰夫32
23deo jfr32 6582w 6582瓦
无效的 无效的

如果有人知道如何取消嵌套空值,我们将不胜感激。我一直在互联网上查找,我发现我们可以包含一个WITH ORDINALITY 子句,但我不知道它是如何工作的。

sql null presto unnest trino

4
推荐指数
1
解决办法
5491
查看次数

如何在 presto 中将字符串散列到 bigint?

我有一个很长的字符串,我想将它半唯一地表示为一个 bigint。理想情况下,我只取散列,但presto 散列函数似乎想要返回“varbinary”,而且我找不到将 varbinary 转换为 bigint 的函数。

如果我写:

cast(xxhash64(cast('asdf' as varbinary)) as bigint)

我收到一条错误消息,说我无法将 varbinary 转换为 bigint。

hash varbinary presto trino

3
推荐指数
1
解决办法
1690
查看次数

对行对象字段的引用

我无法访问我在 Presto 中创建的行对象的字段。Presto 文档声称“字段......使用字段引用运算符访问”。但是,这似乎不起作用。这段代码重现了这个问题:

CREATE TABLE IF NOT EXISTS data AS
SELECT * FROM (VALUES
    (1, 'Adam', 17),
    (2, 'Bill', 42)
) AS x (id, name, age);

CREATE TABLE IF NOT EXISTS ungrouped_data AS
 WITH grouped_data AS (
  SELECT
    id,
    ROW(name, age) AS name_age
  FROM data
 )
SELECT
  id,
  name_age.1 AS name,
  name_age.2 AS age
FROM grouped_data;
Run Code Online (Sandbox Code Playgroud)

它返回“无关输入'.1'”错误。

presto trino

2
推荐指数
1
解决办法
7471
查看次数

展平表中可能为 NULL 或 presto 为空的数组

我在 sql 查询中使用了下表。

在此输入图像描述

我想把它变成下面的形状

在此输入图像描述

我该怎么做呢?我使用了 unnest 和 cross join 。由于数组为空,我没有看到整个视图。

sql arrays flatten presto trino

2
推荐指数
1
解决办法
3077
查看次数

与 Levenshtein 距离的模糊连接

我有一个包含用户名(约 1 000 行)的表,称为“潜在用户”,另一个表称为“实际用户”(约 1000 万行)。所有记录都完全由 [az] 字符组成,没有空格。此外,我知道实际用户表中没有潜在用户。

我希望能够根据 Levenshtein 距离,计算 possible_users 中的每一行,actual_users 中最接近的记录是什么。例如:

| potential_users|
|----------------|
| user1          |
| kajd           |
| bbbbb          |
Run Code Online (Sandbox Code Playgroud)

| actual_users |
|--------------|
| kaj          |
| bbbbbbb      |
| user         |
Run Code Online (Sandbox Code Playgroud)

将返回:

| potential_users | actual_users | levenshtein_distance |
|-----------------|--------------|----------------------|
| user1           | user         | 1                    |
| kajd            | kaj          | 1                    |
| bbbbb           | bbbbbbb      | 2                    |
Run Code Online (Sandbox Code Playgroud)

如果表很短,我可以创建一个交叉联接,计算潜在用户中的每条记录与实际用户中的编辑距离,然后返回具有最低值的记录。然而,在我的例子中,这将创建一个 1 000 x 10 000 000 行的中间表,这有点不切实际。

是否有更干净的方法通过创建交叉连接来执行此类操作?

sql hive presto apache-spark-sql trino

0
推荐指数
1
解决办法
2063
查看次数

如何在 presto 中捕获 NaN?

我尝试了以下方法

IF(X IS NULL,0,X) --不捕获 NaN

IF(X IS NaN,0,X) --输入“nan”不匹配

IF(X = NaN,0,X) --无法解析列“nan”

IF(X = 'NaN',0,X) --'=' 不能应用于 double、varchar(3)

sql presto trino

0
推荐指数
1
解决办法
7018
查看次数