pyspark 数据块中的“如果存在”

relj7zay  于 2023-06-21  发布在  Spark
关注(0)|答案(2)|浏览(137)

我有一个t-sql语句。其检查日期,并且如果其为真,则其将继续执行(插入)。

IF  EXISTS (SELECT dateadd(day,+1,CAST(SnapshotDate as date))  FROM CONFIG.[SnapshotDateTables] WHERE dateadd(day,+1,CAST(SnapshotDate as date))  = CAST(GETDATE() as date))

INSERT INTO [DWH].[F_TIMESHEET_FREEZE]

我怎么能用sql或pyspark在数据库中实现类似的事情,没有偏好。

xtfmy6hx

xtfmy6hx1#

您可以尝试在databricks SQL中使用where子句,如注解中所建议的。

%sql

insert  into <table_name1> select  [column1],[column2]..  from <table_name2> where [column] =  <Value>;

通过下面的演示:
这里我在sample2表中有两行。

我已经创建了所需的地方,我们需要插入值,我插入表的条件如下。

%sql

insert  into sample1 select  *  from sample2 where name =  'Laddu';

条件为true时:

条件为false时:

5vf7fwbs

5vf7fwbs2#

如果在Databricks中使用SQL:

IF EXISTS (
  SELECT DATE_ADD(SnapshotDate, INTERVAL 1 DAY)
  FROM CONFIG.SnapshotDateTables
  WHERE DATE_ADD(SnapshotDate, INTERVAL 1 DAY) = CURRENT_DATE()
)
INSERT INTO DWH.F_TIMESHEET_FREEZE
SELECT ...

然后将SELECT ...替换为您的查询,以便插入到DWH.F_TIMESHEET_FREEZE表中。
如果你在Databricks中使用PySpark:

from pyspark.sql.functions import col, expr

snapshot_exists = spark.sql("""
  SELECT DATE_ADD(SnapshotDate, INTERVAL 1 DAY) AS NextSnapshotDate
  FROM CONFIG.SnapshotDateTables
  WHERE DATE_ADD(SnapshotDate, INTERVAL 1 DAY) = CURRENT_DATE()
""").count() > 0

if snapshot_exists:
    df_insert = ...
    df_insert.write.insertInto("DWH.F_TIMESHEET_FREEZE")

用DataFrame创建逻辑替换df_insert = ...,以便插入到DWH.F_TIMESHEET_FREEZE表中。

相关问题