Commit 890cf95f by hejiangming

增加搜索词市场筛选维度字段

parent 7ef1fd6b
......@@ -197,7 +197,11 @@ if __name__ == '__main__':
# 同 st_attribute_label:copy 表先 ALTER 成 VARCHAR 让 sqoop 写字符串,交换前再 string_to_array 转回 VARCHAR[]
"peak_month",
# 常年可卖标记:标量 int,sqoop 直写,无需中转
"all_year_text_flag"
"all_year_text_flag",
# 搜索词市场筛选维度:Hive 端是清洗后 JSON STRING(如 '{"Flavor":["Chocolate"]}'),PG 端是 jsonb
# Sqoop 不能直接写 jsonb:copy 表先把该列 ALTER 成 varchar 让 sqoop 写字符串,
# 交换前再 ALTER 回 jsonb(USING ...::jsonb),同 st_attribute_label 的中转思路
"st_filter_refinements"
]
# 处理导出表
export_master_tb = f"{export_base_tb}_{date_type}_{year_str}"
......@@ -239,9 +243,14 @@ if __name__ == '__main__':
# copy 表继承自正式分区表(含 st_attribute_label VARCHAR[]),
# 但 Sqoop 不支持直接写入 PG 数组类型,必须先把 copy 表的该列临时改成 VARCHAR
# 等 Sqoop 完成后、分区交换之前,再 ALTER 回 VARCHAR[](见下方 exchange_pg_part_tb 前的处理)
# st_filter_refinements 在 master/copy 里是 jsonb 且带 DEFAULT '{}'::jsonb,
# Sqoop 不能写 jsonb → 先 DROP DEFAULT(避免改类型时默认值转换报错)再 ALTER 成 varchar
# USING st_filter_refinements::text 把 jsonb 显式转字符串;varchar 不限长,避免长 JSON 被截断
sql_alter_to_varchar = f"""
ALTER TABLE {export_tb_copy} ALTER COLUMN st_attribute_label TYPE VARCHAR(200);
ALTER TABLE {export_tb_copy} ALTER COLUMN peak_month TYPE VARCHAR(200);
ALTER TABLE {export_tb_copy} ALTER COLUMN st_filter_refinements DROP DEFAULT;
ALTER TABLE {export_tb_copy} ALTER COLUMN st_filter_refinements TYPE VARCHAR USING st_filter_refinements::text;
"""
DBUtil.engine_exec_sql(engine, sql_alter_to_varchar)
......@@ -320,6 +329,10 @@ if __name__ == '__main__':
ALTER TABLE {export_tb_copy}
ALTER COLUMN peak_month TYPE VARCHAR[]
USING string_to_array(coalesce(peak_month, ''), ',')::varchar[];
ALTER TABLE {export_tb_copy}
ALTER COLUMN st_filter_refinements TYPE jsonb
USING st_filter_refinements::jsonb;
"""
DBUtil.engine_exec_sql(engine, sql_alter_back)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment