这是我正在尝试做的事情的最终结果,因为我认为我正在让它不必要地复杂化。
我想查询 UPC_ID IN(非常长的 UPCS 列表)中的数据。比如,20k 行。
我认为也许最简单的方法是创建一个临时表,并一次插入 1000 行(然后将该表用于 WHERE 条件。) 当我尝试跑步时
CREATE TABLE #TEMP_ITEM (UPC_ID BIGINT NOT NULL)
我明白了
[PARSE_SYNTAX_ERROR] Syntax error at or near '#'line 1, pos 13
UPC 列表来自电子表格,没有共享属性,我只能在其中选择 INTO 或使用数据库中已存在的任何内容生成列表。
我知道我在这里遗漏了一些非常愚蠢的东西,但我被困住了。帮忙吗?
你快到了... 我希望这是在 Databricks 中....
基本上我们不能直接插入,但是可以用insert语句的输出来模拟...
create
or replace temporary view TEMP_ITEM as
select
1 as UPC_ID
UNION
select
2 as UPC_ID
...
...
请参阅以下链接了解更多详情...
希望这有帮助...
如果您的电子表格是 xlsx 文件,并且您可以将电子表格的副本复制到数据块可读的位置,则可以使用
pyspark.pandas
复制它,将其转换为 spark DF,然后将其设置为临时视图.从那里你应该能够使用 SQL 来运行过滤器。
这是一个使用 ADLS 容器和 Azure Databricks 的例子...
%py
import pyspark.pandas as pd
adlsConnStr = (
'abfss://{container}@{account}.dfs.core.windows.net/'
.format(container='adlsCntnr', account='adlsAccnt')
)
adlsPath = 'path/to/file.xlsx'
pd.read_excel(
f'{adlsConnStr}{adlsPath}', '$Sheet1'
).to_spark().createOrReplaceTempView('viewName')
然后在你的下一个牢房...
%sql
select *
from source.table
join viewName
using (UPC_ID) -- or another join condition
如果您的电子表格恰好是 CSV 或其他 spark 可读文件,这会变得更容易...
%sql
create or replace temp view viewName using CSV
options (
path 'abfss://[email protected]/path/to/file.csv'
header 'true' -- if your first row has the column names
-- may need to tell it to infer types or cast columns to get a proper schema later
);
select *
from source.table
join viewName
using (UPC_ID) -- or other join condition