Сначала я использую оконную функцию, сортирую мою таблицу t1
по charge_time
и ставлю t1
объединение с t2
на user_id
.
Я хочу получить первую запись, если t1
имеет более одной записи.
Я использую first
func для реализации этого
_df = ss.sql("""
SELECT
t1.user_id,
t1.pay_id,
t1.sku_mode,
t1.charge_time,
t1.exchange_type_t01,
ROW_NUMBER() OVER(PARTITION BY t1.user_id ORDER BY t1.charge_time)
FROM
{} t1
WHERE
t1.refund_state = 0
""".format(exchange_info_table))
_df.createOrReplaceTempView('d_exchange_info')
df = ss.sql("""
SELECT
first(t1.sku_mode) AS sku_mode,
first(t1.exchange_type_t01) AS exchange_type_t01,
first(t1.user_id) AS user_id,
first(t1.pay_id) AS pay_id,
first(t1.charge_time) AS charge_time,
first(t2.has_yxs_payment) AS has_yxs_payment,
first(t2.has_sxy_payment) AS has_sxy_payment,
first(t2.has_cxy_payment) AS has_cxy_payment,
first(t2.has_sxy19_payment) AS has_sxy19_payment,
first(t2.sxy19_join_time) AS sxy19_join_time,
first(t2.yxs_join_time) AS yxs_join_time
FROM
d_exchange_info t1
JOIN
analytics_db.md_day_dump_users t2
ON
t2.the_day = '{}'
AND t1.user_id = t2.user_id
GROUP BY
t1.user_id
""".format(st))
Я использую first
func, но получу нестабильную запись по виду с записью charge_time.
Если записей больше одного, иногда я получаю один, иногда - другой
Почему это происходит и как это исправить?
Это проблема sparksql или у моего sql есть какая-то проблема?
PS: я уже знаю, как это исправить другим способом, но я хочу знать, почему первый функционал неэффективен.
Спасибо!