在 Azure Databricks 中创建临时表并插入大量行

问题描述 投票:0回答:2

这是我正在尝试做的事情的最终结果,因为我认为我正在让它不必要地复杂化。

我想查询 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 或使用数据库中已存在的任何内容生成列表。

我知道我在这里遗漏了一些非常愚蠢的东西,但我被困住了。帮忙吗?

sql databricks sql-insert azure-databricks
2个回答
1
投票

你快到了... 我希望这是在 Databricks 中....

基本上我们不能直接插入,但是可以用insert语句的输出来模拟...

create
or replace temporary view TEMP_ITEM as
select
  1 as UPC_ID
UNION
select
  2 as UPC_ID
...
...

请参阅以下链接了解更多详情...

是否可以在 spark 中插入临时表?

希望这有帮助...


0
投票

如果您的电子表格是 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
© www.soinside.com 2019 - 2024. All rights reserved.