Я создал сложную структуру в таблице SQL в Databricks с использованием Python и Spark SQL следующим образом:
%python
# Create Table
myDataset = "Person"
myTableSchema = StructType() \
.add("PersonId", IntegerType()) \
.add("Name", StructType() \
.add("FirstName", StringType(),nullable = True) \
.add("LastName", StringType(),nullable = True) \
) \
.add("CreatedDate", StringType(),nullable = True)
myTablePath = MY_HOME_DIR + "Test/" + myDataset + "/"
df = spark.createDataFrame(sc.emptyRDD(), myTableSchema)
df.write.format("delta").save(myTablePath)
spark.sql("CREATE TABLE IF NOT EXISTS {0} USING DELTA LOCATION '{1}'".format(myDataset, myTablePath))
Я могу выполнить SQL Select следующим образом:
sql_cmd = """SELECT named_struct("FirstName", Name) AS FirstName FROM Person"""
spark.sql(sql_cmd).show()
Вывод:
(1) Spark Jobs
+---------+
|FirstName|
+---------+
+---------+
Как выполнить инструкцию SQL INSERT с использованием Spark SQL в сложной структуре Name.FirstName, Name.LastName?
Я пробовал следующее:
sql_cmd = """INSERT INTO Person VALUES(1, 'John','Smith','4/23/2019')"""
spark.sql(sql_cmd)
Но я получаю сообщение об ошибке, говорящее о том, что есть 3 столбца, и я пытаюсь вставить 4. Я предполагаю, что структуру Name необходимо вставить как что-то вроде JSON или другого сложного формата структуры, но сейчасточно знаю, как это сделать.
Как это можно сделать с помощью операторов INSERT и SELECT, таких как:
%sql
INSERT INTO Person
SELECT
PersonId,FirstName,LastName,'4/23/2019' AS CreatedDate
FROM
OtherPersonTable