【问题标题】:copy table from teradata to mysql将表从 teradata 复制到 mysql
【发布时间】:2014-05-14 09:51:26
【问题描述】:

我已经搜索了几个小时没有真正的解决方案。

我想设置一个正在进行的任务(每晚)。我在服务器 1 上的 Teradata 数据库中有一个表。每天晚上我都需要将整个表从这个 teradata 实例复制到我的具有 MySQL 5.6 的开发服务器(服务器 2)。

如何将整个表格从服务器 1 复制到服务器 2?

我尝试过的事情: 1)从teradata服务器1中选择表x中的所有数据到ResultSet中。通过preparedStatement插入mysql。但这太慢了。另外我不知道如何删除表并在每晚使用来自 teradata 服务器的模式重新创建它。

有什么帮助吗?

【问题讨论】:

  • 你试过 csv 吗? Teradata 可以转储 csv 文件,而 MySQL 加载数据 infile 非常有效。假设您没有任何二进制数据类型或其他特定于供应商的怪事,它应该很简单。你在什么操作系统上?如果在 linux 上,您可以运行 Teradata 脚本并从同一个 cron 作业中删除 MySQL 表。
  • 我现在使用 csv 导出,但它是一个手动过程。我需要自动化它。我发现的一个挑战是 teradata 表中的日期是mm/dd/yyyy,当我将它导入 mysql 时,它变成了0000-00-00。不知道如何解决。我在 Windows 服务器上。
  • 我对 Windows 上相当于 cron 作业的了解不多。但是您可以在导入 MySQL 的日期字段上使用 date_format 来指定正确的格式。我曾经对无法在不同数据库系统之间干净地转储/恢复的空间数据做过的事情是在 MySQL 中建立一个黑洞数据库,将 csv 加载到其中,使用 load data infile 并使用触发器来转换数据成 MySQL 几何类型。这避免了必须加载中间表然后对其进行转换(以及随之而来的所有浪费空间)。离墙,也许吧。 :-)
  • 要导出 CSV,您应该使用使用 DELIMITED 的 TPT 导出。并且 Teradata 中的 DATE 没有格式,这仅在将其转换为字符串时应用。这可以使用 FORMAT 命令轻松修改。

标签: java mysql sql teradata


【解决方案1】:

有几种方法可以做到这一点。

注意:这些可能是较旧的方法,只是试图让您思考如何在当前环境中执行此操作。另外,我不熟悉您的数据敏感性和权限等。

一个是通过 CSV 文件将 teradata 传输到 MySQL,请参阅下面的示例和链接。 (这些可能是较旧的帖子,但您需要的是基本想法)。

从 teradata 导出:

创建外部表 database_name.table_name(待创建) SAMEAS database_name.table_name(已存在,待导出数据) 使用(数据对象('C:\Data\file_name.csv') 分隔符“|”远程 'ODBC');

Export From Teradata Table to CSV

编辑:如果 CREATE EXTERNAL TABLE 没有运行,那么您可能必须先使用 java 来提取然后组织数据...在获取数据时模仿当前方法(不管它如何工作)。 Google-fu 有这个方便的链接https://www.google.com/search?q=external+csv+file+teradata&oq=external+csv+file+teradata&

(dnoeth) 下面推荐这个:TPT Export in DELIMITED format(这看起来很麻烦......但可能是唯一的方法)所以这里有一个讨论它的链接:http://developer.teradata.com/tools/articles/external-data-formats-supported-by-the-tpt-dataconnector-operator

导入到 mysql(不要删除表。只需从表中删除):

mysqlimport --ignore-lines=1 \ --fields-terminated-by=, \ --local -u 根\ -p 数据库\ 表名.csv

http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

您需要在两种环境中都安排这个,这可能会很麻烦。

现在我看到您使用 Java,并且在 Java 中,您可以通过(无论您有什么可用于计划任务)来创建一个简单的计划任务。您可能必须进行反复试验,并且您的数据可能会成为问题,具体取决于它是什么。它是如何分隔的,是否有标题等。

然后您将调用上述示例的变体。通过Java

这是一个java示例:

http://www.java-tips.org/other-api-tips/jdbc/import-data-from-txt-or-csv-files-into-mysql-database-t-3.html

还有一个:

How to uploading multiple csv file into mysql database using jsp and servlet?

另一个:

http://www.csvreader.com/java_csv_samples.php

所以基本想法是从 teradata 导出 csv,这应该很简单。

使用Java遍历文件服务器来获取你的文件(你可能需要FTP到某个地方)你可能需要考虑这个......

使用 Java 和 UDF 或一些可以迭代 CSV(东西)并导入 MySQL 的包来使用您的 CSV 文件(自己编写一个或在他们现在所说的“物联网”上找到一个)。

编辑:这里是关于使用 java 调度任务的信息和查看链接。

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html

并检查这个 SO convo...

How to schedule a periodic task in Java?

【讨论】:

  • +1 我使用 csv 建议的更完整版本。
  • 我们都不得不通过这种事情咕哝。我有两个带有医生信息的项目,使用各种提要拉取和洗涤器,并且由于文本字段中的错误字符破坏了我的导入过程而导致导入失败。它可能会变得讨厌......它永远不会完美。 OP 很幸运,它只有一张桌子 :)
  • 顺便说一句,Teradata 中没有 CREATE EXTERNAL TABLE :)
  • @dnoeth。取而代之的是什么?
  • 要导出 CSV,您可以使用 DELIMITED 格式的 TPT 导出。
猜你喜欢
  • 2014-03-30
  • 1970-01-01
  • 2017-08-14
  • 2020-09-05
  • 2018-03-01
  • 2013-12-23
  • 2011-11-21
  • 2020-02-13
  • 1970-01-01
相关资源
最近更新 更多