如何在Informatica PowerCenter中拆分Excel的QueryPath并导入Teradata?
从Excel提取QueryPath并拆分插入Teradata表的实现方案
一、提取并解析QueryPath
- 导出/读取Excel数据
将包含QueryPath的Excel工作表导出为CSV,或直接用脚本读取(比如Python的pandas库):import pandas as pd # 读取Excel文件 df = pd.read_excel("your_file.xlsx", sheet_name="Sheet1") - 解析路径字符串
利用正则表达式提取QueryPath中各节点的name属性值,匹配规则对应给定的层级结构:import re def parse_path(path_str): # 匹配所有@name='xxx'中的xxx值 name_matches = re.findall(r"@name='([^']+)'", path_str) # 固定层级对应:第3个是Area,第4个是SubArea area = name_matches[2].strip() sub_area = name_matches[3].strip() # 判断是否存在Group节点:路径长度为6则有Group,否则用FinalElement填充Group if len(name_matches) == 6: group_val = name_matches[4].strip() final_element = name_matches[5].strip() else: final_element = name_matches[4].strip() group_val = final_element return area, sub_area, group_val, final_element # 对每个QueryPath应用解析函数 df[["Area", "SubArea", "Group", "Final Element"]] = df["QUERYPATH"].apply( lambda x: pd.Series(parse_path(x)) )
二、关联Excel中的ID字段
将解析得到的字段与Excel中原有的id A、idArea、idSubArea、idGroup做关联:
- 若Excel中已有对应匹配关系(如示例中Area与idArea一一对应),可直接通过字段匹配合并数据;
- 存在重复匹配时,根据业务规则筛选目标记录(比如取最新ID或特定分组数据)。
三、数据清洗对齐规则
严格遵循给定规则处理数据:
- 校验Area和SubArea字段非空,若解析缺失则标记异常记录;
- 无Group节点时,直接将FinalElement的值复制到Group字段(如示例中的
Final elementLL、Final elementHJ); - 统一字段格式:去除字符串前后空格,对齐大小写(按需调整)。
四、插入Teradata表
- 建立数据库连接
使用teradatasql库连接Teradata(需提前安装):import teradatasql conn = teradatasql.connect( host="your_td_host", user="your_username", password="your_password" ) cursor = conn.cursor() - 创建目标表(按需)
根据字段结构创建表(注意Group为关键字,需用双引号转义):CREATE TABLE IF NOT EXISTS querypath_dim ( idA VARCHAR(50), root_folder VARCHAR(100), second_folder VARCHAR(100), idArea INT, area VARCHAR(50), idSubArea INT, subArea VARCHAR(50), idGroup INT, "Group" VARCHAR(100), final_element VARCHAR(100) ); - 批量插入数据
用批量插入提升效率:# 整理为插入所需的元组列表 insert_data = [tuple(row) for row in df[["id A", "root_folder", "second_folder", "idArea", "Area", "idSubArea", "SubArea", "idGroup", "Group", "Final Element"]].values] insert_sql = """ INSERT INTO querypath_dim (idA, root_folder, second_folder, idArea, area, idSubArea, subArea, idGroup, "Group", final_element) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ cursor.executemany(insert_sql, insert_data) conn.commit() - 关闭连接
cursor.close() conn.close()
五、验证数据
插入完成后,执行查询验证数据准确性:
SELECT area, "Group", final_element FROM querypath_dim WHERE idA = '112';
内容的提问来源于stack exchange,提问作者Michaelle Sameer Ta Ani
相关产品推荐
相关产品推荐

