数据仓库之历史数据缺少字段脚本

简介:
脚本使用perl DBI,获取相关错误信息再把错误中的字段提取出来判断是某字段少后直接添加该字段,然后再select 相关数据出来,有朋友建议采用数组的方式处理,不过目前还不太清楚怎么倒腾。呵呵
use DBI;
my $driver="DBI:mysql";
my $database="sql";
my $user="root";
my $password="pass";
my $host="localhost";
my $str;
my $datapath="/sqldb/setup/data/";
my $file="$datapath/tbl_sch_charactor$ARGV[0].txt";
my $accountfile="$datapath/tbl_sch_account$ARGV[0].txt";
my $sql="select id,guid,name,gender,tg,`to`,classId,exp,expSkill,exPoint from tbl_sch_charactor order by id;";
my $account="select id,last,lastIp from tbl_sch_account;";
my $dbh=DBI->connect("$driver:database=$database;host=$host;user=$user;password=$password") ;
$dbh->do("set names utf8;") or die "Can't set names". dbh->errstr;
my $stha=$dbh->prepare($account) or die "Can't connect: ". stha->err;
$stha->execute() or die stha->err;
print "#"x20,"\n","deal with account table\n";
my($id,$last,$lastIP);
$stha->bind_columns(\$id,\$last,\$lastIP);
open (HEAD,">$accountfile")|| die "Can't open $accountfile:$!\n";
printf HEAD "%s\t%-s\t%-s\n","id","last","lastIP";
while($stha->fetch()){
open (HEAD,">>$accountfile")|| die "Can't open newfile:$!\n";
printf HEAD "%s\t%-s\t%-s\n",$id,$last,$lastIP;
}
 

#tbl_sch_charactor 
print "\ndeal with tbl_sch_charactor\n\n";
my $sth=$dbh->prepare($sql) or die "Can't connect: ". sth->errstr ;
$sth->execute() or  $str=$sth->errstr;
print "*"x20,"\n";
printf "\nselected data for sql.tbl_sch_charactor.\n";
if(!$str){#判断str是否为空,为空执行里面语句!str为空
 #提取数据
print "The data is normal!\n";
my($id,$guid,$name,$gender,$tg,$to,$classId,$exp,$expSkill,$exPoint);
$sth->bind_columns(\$id,\$guid,\$name,\$gender,\$tg,\$to,\$classId,\$exp,\$expSkill,\$exPoint);
open (SELECTOUT,">$file")|| die "Can't open newfile:$!\n";
printf SELECTOUT "%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\n","id","guid","name","gender","tg","to","classId","exp","expSkill","exPoint";
while($sth->fetch()){
open (SELECTOUT,">>$file")|| die "Can't open newfile:$!\n";
printf SELECTOUT "%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\n",$id,$guid,$name,$gender,$tg,$to,$classId,$exp,$expSkill,$exPoint;
} }else{  
print "The data have some problem !deal with it now\n";
@error=split ("'",$str);
print "$error[1]","\n";
print "#"x100,"\n";
 if ($error[1] eq exPoint){
 $dbh->do(qq/alter table tbl_sch_charactor add column exPoint  bigint(20) default 0;/) or die "alter table erorr";
 $dbh->do(qq/insert into tbl_sch_charactor($error[1]) values(NULL)/);
 }elsif($error[1] eq expSkill ){
  $dbh->do(qq/alter table tbl_sch_charactor add column expSkill bigint(20) not null;/) or die "alter table erorr";
         $dbh->do(qq/insert into tbl_sch_charactor($error[1]) values('0')/);
  }
my $sth=$dbh->prepare($sql) or die sth->errstr ;
$sth->execute() or die sth->errstr;
#提取数据
my($id,$guid,$name,$tg,$to,$exp,$expSkill,$exPoint);
$sth->bind_columns(\$id,\$guid,\$name,\$tg,\$to,\$exp,\$expSkill,\$exPoint);
open (SELECTOUT,">$file")|| die "Can't open newfile:$!\n";
printf SELECTOUT "%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\n","id","guid","name","gender","tg","to","classId","exp","expSkill","exPoint";
while($sth->fetch()){
open (SELECTOUT,">>$file")|| die "Can't open newfile:$!\n";
printf SELECTOUT "%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\n",$id,$guid,$name,$gender,$tg,$to,$classId,$exp,$expSkill,$exPoint;
}
}
 
$stha->finish();
$sth->finish();
$dbh->disconnect();
print "deal with the tables over!\n\n";
print "*"x20,"\n";

本文转自 qwjhq 51CTO博客,原文链接:http://blog.51cto.com/bingdian/270341
相关文章
|
4月前
|
存储 自然语言处理 Cloud Native
云数据仓库ADB问题之全文索引检索字段过长时条件会失效如何解决
云数据仓库AnalyticDB是阿里云提供的一种高性能、弹性扩展的云原生数据仓库解决方案;本合集将深入探讨ADB的架构、性能调优、数据管理和应用场景等,以及如何解决在使用过程中可能出现的问题,提高数据仓库的使用效率。
120 4
|
25天前
|
存储 数据管理 BI
揭秘数据仓库的奥秘:数据究竟如何层层蜕变,成为企业决策的智慧源泉?
【8月更文挑战第26天】数据仓库是企业管理数据的关键部分,其架构直接影响数据效能。通过分层管理海量数据,提高处理灵活性及数据一致性和安全性。主要包括:数据源层(原始数据)、ETL层(数据清洗与转换)、数据仓库层(核心存储与管理)及数据服务层(提供分析服务)。各层协同工作,支持高效数据管理。未来,随着技术和业务需求的变化,数仓架构将持续优化。
38 3
|
2月前
|
存储 Cloud Native 关系型数据库
云原生数据仓库使用问题之如何将一行数据转换为多行数据
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
4天前
|
存储 机器学习/深度学习 数据管理
数据技术的进化史:从数据仓库到数据中台再到数据飞轮
数据技术的进化史:从数据仓库到数据中台再到数据飞轮
|
4月前
|
存储 机器学习/深度学习 数据采集
【专栏】在数字化时代,数据仓库和数据湖成为企业管理数据的关键工具
【4月更文挑战第27天】在数字化时代,数据仓库和数据湖成为企业管理数据的关键工具。数据仓库是经过规范化处理的结构化数据集合,适合支持已知业务需求;而数据湖存储原始多类型数据,提供数据分析灵活性。数据仓库常用于企业决策、财务分析,而数据湖适用于大数据分析、机器学习和物联网数据处理。企业需根据自身需求选择合适的数据存储方式,以挖掘数据价值并提升竞争力。理解两者异同对企业的数字化转型至关重要。
114 2
|
4月前
|
运维 Cloud Native 关系型数据库
云原生数据仓库产品使用合集之原生数据仓库AnalyticDB PostgreSQL版如果是列存表的话, adb支持通过根据某个字段做upsert吗
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
20天前
|
Java Spring 监控
Spring Boot Actuator:守护你的应用心跳,让监控变得触手可及!
【8月更文挑战第31天】Spring Boot Actuator 是 Spring Boot 框架的核心模块之一,提供了生产就绪的特性,用于监控和管理 Spring Boot 应用程序。通过 Actuator,开发者可以轻松访问应用内部状态、执行健康检查、收集度量指标等。启用 Actuator 需在 `pom.xml` 中添加 `spring-boot-starter-actuator` 依赖,并通过配置文件调整端点暴露和安全性。Actuator 还支持与外部监控工具(如 Prometheus)集成,实现全面的应用性能监控。正确配置 Actuator 可显著提升应用的稳定性和安全性。
42 0
|
25天前
|
存储 NoSQL 索引
MPP架构数据仓库使用问题之在ORC文件中,String类型字段是怎么进行编码的
MPP架构数据仓库使用问题之在ORC文件中,String类型字段是怎么进行编码的
|
2月前
|
存储 SQL Cloud Native
云原生数据仓库使用问题之如何将数据设置为冷存储
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
2月前
|
Cloud Native 关系型数据库 MySQL
云原生数据仓库使用问题之如何将ADB中的数据导出到自建的MySQL数据库
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。

热门文章

最新文章