Hive表加工为知识图谱实体关系表标准化流程

本文详细阐述了如何处理源数据静态文件中的分隔符、包围符问题,导入Hive表的建表策略,以及对Hive表数据进行清洗以满足知识图谱导入的高质量要求。涵盖了数据清洗、CSV文件规范、Hive表构建和随机样本检查的关键步骤。

加工原则是从Hive的原数据表中抽取出导图所用的实体和关系字段,包括重要的属性描述字段,最后导入图数据库。


1 对源数据静态文件的加工

1.1 分隔符的处理情况

对CSV格式的静态数据文件处理前,建议将服务器上的文件切片取样例,拿到windows本地,使用Excel对数据做探查。此步骤是为了确认数据文件样本中是否存在由分隔符引起的错行问题,该问题会导致字段与数据错乱,导表时数据类型错误等。

  • 情况一

当CSV文件中包含有逗号、换行符或双引号等特殊字符时,常常需要使用包围符(quote character)来确保正确地解析数据。在CSV中,通常双引号是用作包围符。下面是一个带有双引号包围符的CSV数据样例:

"Name","Age","City"
"John Doe",25,"New York"
"Jane Smith",30,"San Francisco"
"Alice Brown",22,"Los Angeles"

在这个例子中,每个字段都用双引号包围,即使字段中没有特殊字符也是如此。这样的做法有助于确保解析CSV时正确地处理包含逗号或换行符的字段。如果字段中包含双引号本身,通常会用两个双引号来表示一个双引号,例如:

"Name","Description"
"John Doe","He is 6 feet tall."
"Jane Smith","She is 5'8\" tall."
"Alice Brown","Her nickname is ""Ali""."

在这个例子中,描述字段包含逗号和双引号,并使用了双引号进行包围,并通过两个双引号来表示一个双引号。

  • 情况二

如果某个字段中包含英文逗号,则要为这个字段添加包围符,在该字段的值两侧添加双引号。下面是一个示例:

Name,Age,Description,City
John Doe,25,"Loves hiking, camping",New York
Jane Smith,30,"Enjoys reading, writing",San Francisco
Alice Brown,22,"Has a cat, a dog",Los Angeles

在这个例子中,Description字段中的"Loves hiking, camping"包含英文逗号,因此该字段的值被用双引号包围。其他不包含特殊字符的字段则没有被包围符包围。

在处理此类CSV文件时,解析器应该能够正确地识别字段值两侧的包围符,并将其视为一个整体。通常,CSV解析器会根据字段两侧是否有包围符来区分字段。

1.2 无法通过分隔符以及包围符区分字段

此种情况比较极端,但是实践中也会有,当来源数据是从另一个数据资产平台导出时,如果没有设置好分隔符以及包围符的策略规则,就会遇到该情况。ChatGPT提供了这几种思路:使用不同的分隔符数据预处理使用正则表达式联系数据提供者

在实践中,首先仍然是将数据样例取到Excel,进行人工分析,确定错乱字段行数据的位置。由此,可以定位到所取分隔符的位置,我们使用正则表达式的方式确定该分隔符的位置,假设分隔符是,,则将其替换成,",此时,就会得到一个错乱字段左侧含半个包围符的数据行。同理,对于另一侧的取包围符动作,也是使用正则匹配数据行尾到错乱字段的分隔符位置,将,替换为",即可。

例如:匹配正数第n个逗号^(.*?,.*?)\K,,匹配倒数第2个逗号,(?=(?:[^,]*,){2}[^,]*$)

1.3 数据中存在回车换行符

如果CSV文件中不仅分隔符错乱,字段中还夹杂回车换行,此时,每行数据并不是完整的一条,首先需要对回车和换行进行替换,替换为空。在替换的时候,需要处理windows下的换行符和linux下的换行符。一般来说采用sed 's/\r$//' file.csv > file2.csv去除windows换行,使用tr -d '\n' < input.txt > output.txt命令去除linux换行。

该操作后会得到一个只有一行的数据文件,此时需要重新规划每行数据的头,我们需要对每行数据的关键字符串特征指定正则表达式去匹配,并且将匹配到的关键字段加以换行符,这样就能得到正确的行数据。例如:

sed 's/A4401/\
A4401/g' t2.csv > output.txt
  • 该命令会将以A4401开头的数据加上换行符,此时即重新获得了逐行的完整数据。
sed -i 's/,\([0-9]\{17\}[0-9X]\|^[0-9]\{15\}\),/\n\1,/g' your_file.txt
  • 该命令会以大陆身份证为特征作为数据开头,在身份证前插入换行符。

以上步骤要根据文件大小,灵活采用awk,sed命令,或者正则,必要时对文件使用 split

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序终结者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值