全部产品
云市场
云游戏

数据迁移

更新时间:2019-12-27 10:55:46

ODPS 数据导入 TSDB 2.0

添加 TSDB 2.0 数据源

由于 TSDB 2.0 兼容 Postgresql 访问接口,因此对于关系型数据,将 TSDB 2.0 作为一个 Postgresql 数据库来访问是非常方便的。添加一个 TSDB 2.0 的数据源的步骤和添加 Postgresql 数据库是一样的。下面介绍如何在阿里云上添加 TSDB 2.0 的数据源。

  1. 打开 DataWorks 数据源管理,点击“添加数据源”,选择 PostgreSQL,会见到如下界面:

datax_datasource

  1. 对于有公网IP的TSDB 2.0,选择连接串模式,输入JDBC URL、用户名、密码等信息,就可以了。点击测试连通性,如果配置无误,就会看到 测试连通性成功 的提示。然后点完成就可以成功添加此数据源了。

    创建数据同步任务

  2. 在阿里云 DataStudio 之中新建一个 数据集成 -> 数据同步 任务。

  3. 点击任务工具栏中的 “转换脚本”,将 数据同步 UI 转换成 脚本模式。目前只支持脚本模式数据导入。
  4. 参考下一节的示例,编写数据同步脚本。
  5. 脚本编写完毕后,点击保存,运行脚本。数据同步工作即可执行。

数据同步任务示例

首先假设 ODPS 中源表结构如下:odpsTable在 TSDB 2.0 中创建目标表:

  1. create table odps_type_test (icol bigint, dcol double, tcol text, gcol geometry, ts timestamp);

创建出的表结构如下:tsdbTable相应的数据同步任务脚本如下:

  1. {
  2. "type": "job",
  3. "steps": [
  4. {
  5. "stepType": "odps",
  6. "parameter": {
  7. "partition": [],
  8. "datasource": "odps_first",
  9. "column": [
  10. "icol",
  11. "dcol",
  12. "tcol",
  13. "gcol",
  14. "ts"
  15. ],
  16. "emptyAsNull": false,
  17. "table": "odps_type_test"
  18. },
  19. "name": "Reader",
  20. "category": "reader"
  21. },
  22. {
  23. "stepType": "postgresql",
  24. "parameter": {
  25. "postSql": [],
  26. "pgType": {
  27. "gcol": "geography"
  28. },
  29. "datasource": "tsdb2",
  30. "column": [
  31. "icol",
  32. "dcol",
  33. "tcol",
  34. "gcol",
  35. "ts"
  36. ],
  37. "writeMode": "insert",
  38. "table": "odps_type_test",
  39. "preSql": []
  40. },
  41. "name": "Writer",
  42. "category": "writer"
  43. }
  44. ],
  45. "version": "2.0",
  46. "order": {
  47. "hops": [
  48. {
  49. "from": "Reader",
  50. "to": "Writer"
  51. }
  52. ]
  53. },
  54. "setting": {
  55. "errorLimit": {
  56. "record": ""
  57. },
  58. "speed": {
  59. "throttle": false,
  60. "concurrent": 2
  61. }
  62. }
  63. }

其中重点关注的点有 datasource 就是对应的ODPS数据源的名字以及我们添加的 TSDB 2.0 的数据源的名字。以及 geometry 列的导入方式。其它参数可参考 DataWorks 文档进行合适的设置。

geometry 列的导入

由于 geometry 对象是一种相对来说比较特殊的对象,并不是一种出现在 SQL 标准中的标准数据类型,因此在 JDBC 的通用框架并不支持,所以导致 geometry 对象的导入导出需要进行特殊的处理,本节就详细描述 geometry 对象导入导出的配置及其原理。

ODPS 并不支持 geometry 等空间对象,因此 ODPS 之中,空间对象要存储为 STRING 类型。空间对象的 STRING 表示法最通用的就是 WKT ( Well Known Text)表示法。所以我们要求 ODPS 数据源中的空间对象必须是采用 WKT 表示法的 STRING 类型。

同时,在 Writer 中,必须声明如下配置:其中gcol是目标表中对应的geometry列的列名。其中关键字 pgType 和 geography 不能更改。

  1. "pgType": {
  2. "gcol": "geography"
  3. },

在 Writer 中如此配置之后,在写数据的 SQL 语句中,就会接受 STRING 类型的数据,并将其转换为目标表中对应列的真正类型,从而保障数据能够正确写入。目前 TSDB 2.0 只支持空间参考坐标系(SRID)为4326的空间对象,暂不支持其它空间参考坐标系。

TSDB 2.0 到 TSDB 2.0 数据同步任务

还是以上面的表为例,只需创建如下的同步任务即可:

  1. {
  2. "type": "job",
  3. "steps": [
  4. {
  5. "stepType": "postgresql",
  6. "parameter": {
  7. "tableType": null,
  8. "datasource": "tsdb2_source",
  9. "column": [
  10. "icol",
  11. "dcol",
  12. "tcol",
  13. "gcol",
  14. "ts"
  15. ],
  16. "guid": null,
  17. "where": "",
  18. "splitPk": "",
  19. "table": "odps_type_test"
  20. },
  21. "name": "Reader",
  22. "category": "reader"
  23. },
  24. {
  25. "stepType": "postgresql",
  26. "parameter": {
  27. "postSql": [],
  28. "datasource": "tsdb2_dest",
  29. "pgType": {
  30. "gcol": "geography"
  31. },
  32. "column": [
  33. "icol",
  34. "dcol",
  35. "tcol",
  36. "gcol",
  37. "ts"
  38. ],
  39. "writeMode": "insert",
  40. "table": "odps_type_test",
  41. "preSql": []
  42. },
  43. "name": "Writer",
  44. "category": "writer"
  45. }
  46. ],
  47. "version": "2.0",
  48. "order": {
  49. "hops": [
  50. {
  51. "from": "Reader",
  52. "to": "Writer"
  53. }
  54. ]
  55. },
  56. "setting": {
  57. "errorLimit": {
  58. "record": ""
  59. },
  60. "speed": {
  61. "concurrent": 2,
  62. "throttle": false
  63. }
  64. }
  65. }

保存之后执行即可在 TSDB 2.0 之间进行数据同步。

TSDB 2.0 到其它数据源也是同样的道理。