提问人:Teodorico Levoff 提问时间:3/15/2023 更新时间:3/15/2023 访问量:90
Scala SQL - 读取 id 文件,并在查询的 WHERE 子句中包含 id
Scala SQL - Read in file of ids and include id in WHERE clause in query
问:
我有一个 ids 的 txt 文件,.txt文件中每行一个 id。我想使用 Scala 编写一个简单的 SQL 查询,该查询读取这些 id 并将这些 id 包含在 where 子句中,因为我只对查询这些特定 id 的值感兴趣。BigInteger
示例 .txt 文件
1234566789
9876543212
假定 $id 是.txt中的一组 ID 或 ID 列表的示例查询。文件。
spark.sql(f"""
SELECT
table_x.id,
AVG(table_x.cost)
FROM table_x
WHERE table_x.id = $id
GROUP BY table_x.id
""")
我正在寻找一些有效的东西。我想我可以加载这些 id 并将它们存储为 Scala 中的集合,并检查此集合中是否存在。但我不确定最有效的解决方案是什么,因为 ids 的.txt文件行数将超过 100k。table_x.id
答:
0赞
iShaymus
3/15/2023
#1
我对 Amazon RDS 不够熟悉,不知道可以使用什么 RDMS 软件将文本文件传输到数据库。也许它需要存储在 Amazon S3 上?
我不知道您在 RDS 上运行的是哪个数据库引擎,但我会举例说明 Oracle,因为这是我习惯的。
一旦你在某个地方有了文件,数据库就可以访问它,你将从文本文件创建一个新表
CREATE GLOBAL TEMPORARY TABLE MYSCHEMA.MY_ID_TABLE_NAME (
MY_IDS varchar2(32), -- number if you're sure they will only ever be numeric
) ON COMMIT PRESERVE ROWS;
LOAD DATA
INFILE 'C:\path\to\my-super-ID-data.txt'
TRUNCATE
INTO TABLE MYSCHEMA.MY_ID_TABLE_NAME
FIELDS TERMINATED BY '\r' --carriage return can be ',' for CSV
(
MY_IDS
)
然后,您应该有一个包含所有 ID 的单列表MYSCHEMA.MY_ID_TABLE_NAME
此时,您将按如下方式运行查询
spark.sql(f"""
SELECT
x.id,
AVG(x.cost)
FROM table_x x
WHERE x.id IN (SELECT my_ids FROM MYSCHEMA.MY_ID_TABLE_NAME)
GROUP BY x.id
""")
今后,如果要使用最新的 ID 再次重新运行查询,则可以从新文件重新创建临时表,然后进行冲洗并重复。
上一个:如何跟踪对网络文件系统的写入性能
下一个:MS SQL 高 IO/成本
评论
WHERE IN
WHERE IN
WHERE IN