У меня есть потоковая передача данных датчика, где данные сохраняются в S3, разделенные по времени (год / месяц / день).Я называю это посадочной зоной .
Затем у меня есть периодический пакетный процесс, чтобы взять последние данные из посадочной зоны и сохранить их в другом наборе данных в S3, который разделен другимнабор ключей.Это разделение по соображениям производительности;пользователи обычно фильтруют по ключам разделов, поэтому при запросах объем данных, которые необходимо извлечь с диска, сводится к минимуму.Я называю это аналитической зоной .
. Теперь у меня есть пользователь, которому необходимо запрашивать данные как в зоне приземления, так и в аналитической зоне, т. Е. Чтобы у них были самые свежие данные.
Подходит ли union()
для объединения наборов данных, имеющих одинаковые столбцы, но разделенных по разным полям?Например,
// historical contains data up to but excluding Year=2018, Month=10, Day=1
// assetID is a partition field
historicalDF = spark.sql("SELECT * FROM historical WHERE assetID = 123")
// Year, Month and Day are partition fields
liveDF = spark.sql(
"""SELECT * FROM live
WHERE Year = 2018 AND Month = 10 AND Day = 1 AND assetID = 123""")
allDF = historicalDF.union(liveDF)