我目前正在尝试将所有DT文件v2插入BQ。 我已经用点击文件做了,我发现了任何麻烦。
但它与活动和印象不同。
我编写了一个快速脚本来帮助我制作插入架构:
import csv,json
import glob
data = []
for i in glob.glob('*.csv'):
print i
b = i.split("_")
print b[2]
with open(i, 'rb') as f:
reader = csv.reader(f)
row1 = next(reader)
title = [w.replace(' ', '_').replace('/', '_').replace(':', '_').replace('(', '_').replace(')', '').replace("-", "_") for w in row1]
print title
for a in title:
j={"name":"{0}".format(a),"type":"string","mode":"nullable"}
print j
if j not in data:
data.append(j)
with open('schema_' + b[2] + '.json', 'w') as outfile:
json.dump(data, outfile)
之后,我使用小bash脚本从我们的GCS插入所有数据。
#!/bin/bash
prep_files() {
date=$(echo "$f" | cut -d'_' -f4 | cut -c1-8)
echo "$n"
table_name=$(echo "$f" | cut -d'_' -f1-3)
bq --nosync load --field_delimiter=',' DCM_V2."$table_name""_""$date" "$var" ./schema/v2/schema_"$n".json
}
num=1
for var in $(gsutil ls gs://import-log/01_v2/*.csv.gz)
do
if test $num -lt 10000
then
echo "$var"
f=$(echo "$var" | cut -d'/' -f5)
n=$(echo "$f" | cut -d'_' -f3)
echo "$n"
prep_files
num=$(($num+1))
else
echo -e "Wait the next day"
echo "$num"
sleep $(( $(date -d 'tomorrow 0100' +%s) - $(date +%s) ))
num=0
fi
done
echo 'Import done'
但我有这样的错误:
错误: 遇到太多错误。 (错误代码:无效) /gzip/subrange//bigstore/import-log/01_v2/dcm_accountXXX_impression_2016101220_20161013_073847_299112066.csv.gz:CSV表引用列位置101,但从位置开始的行:0只包含101列。 (错误代码:无效)
所以我用以下方法检查模式中的列数:
$awk -F',' '{print NF}'
但我有很多专栏......
所以我认为这是因为我们有逗号的价值(一些发布者正在使用.NET框架,它允许在URL中使用逗号)。但这些值用双引号括起来。
所以我用一个小文件进行了测试:
id,url
1,http://www.google.com
2,"http://www.google.com/test1,test2,test3"
这次加载有效......
如果有人有线索可以帮助我,那可能真的很棒。 :)
编辑:我通过使用已解压缩的文件进行加载来进行另一项测试。
遇到太多错误。 (错误代码:无效) file-00000000:CSV表引用列位置104,但从位置开始的行:2006877004仅包含104列。 (错误代码:无效)
我使用此命令查找行:$tail -c 2006877004 dcm_accountXXXX_activity_20161012_20161013_040343_299059260.csv | head -n 1
我明白了:
3079,10435077,311776195,75045433,1,2626849,139520233,IT,,28,0.0,22,,4003208,,dc_pre=CLHihcPW1M8CFTEC0woddTEPSQ;~oref=http://imasdk.googleapis.com/js/core/bridge3.146.2_en.html,1979747802,1476255005253094,2,,4233079,CONVERSION,POSTVIEW,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0.000000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
之后:$head -n1 dcm_account8897_activity_20161012_20161013_040343_299059260.csv | awk -F',' '{print NF}'
回复:102
所以,我在第一行有104列,在这一行有102列......
其他人在使用DT文件v2时遇到问题吗?
答案 0 :(得分:1)
我有类似的问题,发现问题是由于一些记录被回车分成2行。删除\ r \ n解决了问题
受影响的行通常不是错误日志中反映的行。
答案 1 :(得分:0)
我会从google工作表打开csv文件,并将列与您生成的架构进行比较。 很可能你会在架构中发现一个错误。