小编and*_*boy的帖子

Redshift SQL - 从字符串中提取数字

在 Amazon Redshift 表中,我有一个字符串列,我只需要从中提取数字。为此,我目前使用

translate(stringfield, '0123456789'||stringfield, '0123456789')
Run Code Online (Sandbox Code Playgroud)

我正在尝试 REPLACE 函数,但它不会很优雅。

有什么想法可以先将字符串转换为 ASCII,然后执行一些操作来仅提取数字吗?或者任何其他替代方案。这里很难,因为 Redshift 不支持功能并且缺少很多传统功能。

编辑:尝试下面的方法,但它只返回 051-a92,因为我需要 05192 作为输出。我正在考虑子字符串等,但我现在只有 regexp_substr 可用。如何去掉中间的任何字符

select REGEXP_SUBSTR('somestring-051-a92', '[0-9]+..[0-9]+', 1)
Run Code Online (Sandbox Code Playgroud)

regex sql data-conversion amazon-redshift

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

Redshift UPDATE令人望而却步

我在Redshift集群中有一个表,行数约为10亿.我有一个作业试图根据一些过滤器更新一些列值.在此表中更新任何内容都非常慢.这是一个例子:

SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
  AND col2 = 12;
Run Code Online (Sandbox Code Playgroud)

上面的查询在不到一秒的时间内返回,因为我有sortkeys col1col2.只有一行符合此条件,因此结果集只有一行.但是,如果我跑:

UPDATE SOMETABLE
SET col3 = 20
WHERE col1 = 'a value of col1'
  AND col2 = 12;
Run Code Online (Sandbox Code Playgroud)

此查询需要一段未知的时间(我在20分钟后停止了).同样,它应该更新一行的一个列值.

我还尝试按照此处的文档:http://docs.aws.amazon.com/redshift/latest/dg/merge-specify-a-column-list.html,其中讨论了如何创建临时临时表以进行更新主表,但得到了相同的结果.

知道这里发生了什么吗?

sql-update amazon-redshift

6
推荐指数
1
解决办法
6686
查看次数

数据帧的 base64 解码

我有一个编码的数据帧,我设法使用 PySpark 中的以下代码对其进行解码。有没有什么简单的方法可以通过 Scala/PySpark 在数据帧本身中增加一列?

import base64
import numpy as np
df = spark.read.parquet("file_path")
encodedColumn = base64.decodestring(df.take(1)[0].column2)
t1 = np.frombuffer(encodedColumn ,dtype='<f4')
Run Code Online (Sandbox Code Playgroud)

我查找了多个类似的问题,但无法使它们起作用。

编辑:在同事的帮助下得到了它。

def binaryToFloatArray(stringValue: String): Array[Float] = {
val t:Array[Byte] = Base64.getDecoder().decode(stringValue)
val b = ByteBuffer.wrap(t).order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer()
val copy = new Array[Float](2048)
b.get(copy)
return copy
}
val binaryToFloatArrayUDF = udf(binaryToFloatArray _)
val finalResultDf = dftest.withColumn("myFloatArray", binaryToFloatArrayUDF(col("_2"))).drop("_2")
Run Code Online (Sandbox Code Playgroud)

base64 scala dataframe apache-spark pyspark

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