sql - Spark SQL:在表的列中选择 10 个随机选择的值组
问题描述
我有一个表,在数据库中。有一列“id”,每个 id 有多行。我想随机选择 10 个 id,然后用这些 id 加载所有行。以下是有效的,并给了我一个包含 10 个随机 ID 的表格。没关系。
distinct_ids = spark.sql(f""" (SELECT DISTINCT id FROM {database_name}.{orig_table_cl_name} ORDER BY RAND() LIMIT 10)
但现在我不知道如何与原始表进行内部连接以获取包含正确 ID 的所有数据......我试过:
distinct_ids = spark.sql(
f""" (SELECT DISTINCT vehicle_id
FROM {database_name}.{orig_table_name}
ORDER BY RAND() LIMIT 10)
AS table
INNER JOIN table
ON {database_name}.{orig_table_name}.id = table.id""")
给我以下错误:
ParseException:
mismatched input 'AS' expecting {<EOF>, ';'}(line 1, pos 99)
== SQL ==
(SELECT DISTINCT vehicle_id FROM pnds12v_dev_core.t_cycle_log_car_v2_0 ORDER BY RAND() LIMIT 10) AS table
我尝试了一堆其他的参数顺序,但我想我错过了对它如何工作的一般理解......并且因为我认为使用 spark.sql 时没有分号,所以错误消息没有给我任何提示。
有人可以向我解释如何进行这样的查询吗?
解决方案
分号错误或多或少意味着AS
不希望在那里找到关键字,并且分号(查询结束)可以代替它。
解决您的问题的一种方法是“反转” sql 查询,并将原始表与您的辅助子句连接起来,选择 10 个随机 id:
spark.sql(
f"""SELECT {database_name}.{orig_table_name}.*
FROM {database_name}.{orig_table_name}
INNER JOIN (select distinct {database_name}.{orig_table_name}.id ORDER BY RAND() LIMIT 10) t
ON {database_name}.{orig_table_name}.id = t.id"""
)
推荐阅读
- php - 从 mysql 查询编辑 wordpress 菜单
- javascript - 如何将函数作为参数与 RegEx 匹配?
- swift - 无法从 Firebase 加载我当前用户的帖子 - Swift
- html - 如何对齐列本身,而不是其中的内容在表格中左对齐
- shell - ./install: 功能:未找到 - gpu-blast
- wordpress - 将 Woocommerce Checkout 街道名称和门牌号码合并到地址
- math - 带有自定义范围的 Sigmoid 缩放和反转
- sql - Gcloud SQL Postgres 导入错误:CREATE TABLE ERROR:在“AS”第 2 行或附近出现语法错误:AS 整数 ^ 导入错误:退出状态 3**
- angular - Schematic 输入不针对 Schema: {"name":"testng7"} on Angular 7 进行验证
- python - 如何在python中左连接2个数据帧,如果过滤后第二个数据帧中有多个匹配行,则与第一行连接