以下限制会影响 Spark 到 Teradata 链接的使用:
- 不支持系统之间的事务语义。
- Teradata QueryGrid 不会收集远程 Teradata 查询的查询指标(如 CPU 使用率)。
- BLOB 和 CLOB 支持的大小上限小于 2GB (2,097,088,000)。
- VARCHAR 的大小上限为 64k。
- Teradata Database 版本 15.10 不支持临时数据库名称 NVP。
- Spark SQL 目标连接器不支持外部函数执行 (FFE) 功能。
- Spark 连接器不支持 ACID 表或事务表。
在数据已导出并提交到远程系统后,本地系统上的任何后续错误或中止不会回滚远程请求。
- 对 Spark 发起程序连接器使用 Explain 命令时,远程服务器不会返回查询和执行计划数据。
- 时间戳精度的缺省值为九 (9);使用 Spark 到 Terdata 链接时,Teradata QueryGrid 会截断小数位超过六个的数据。
- 只有有限的谓词下推可用。
- 在启动 Spark Thrift 服务器或 Spark Shell 以使用 Spark 连接器时,Teradata 建议将 spark.task.maxFailures 属性设置为 1,并将 spark.blacklist.enabled 属性设置为 false。
- 可能的 Apache Spark 限制因素带来的结果如下:
- Spark 2.1 及更高版本:在使用 Spark 发起程序时,如果在创建表示目标表的非本地表之后,该目标表的模式发生更改,则必须重新创建该非本地表以反映此模式更改。
- Spark 2.2 及更高版本:在使用 Spark 目标连接器导入 DATE 类型的数据或使用 Spark 发起程序导出 DATE 类型的数据时,来自 Spark 的数据值可能不正确。
- Spark 2.2 及更高版本:Spark 不支持 Char/Varchar;因此,当使用 Spark 目标连接器插入来自 QueryGrid 的数据,且目标表包含 char/varchar 列时,来自 QueryGrid 的数据可能不正确。要避免可能不正确的数据,请使用 String,不要使用 Char/Varchar。
- 如果 Spark 已升级或标准 Spark JAR 的位置发生了更改,则需要重新启动 tdqg-node。
- 如果 UTF-16 补充字符超过了表中 2 个字节的限制,将会截断数据。
- 如果表字符集不是 Latin 或 UTF-16,则 Spark 表的 VARCHAR、STRING 和 CHAR 列不支持 IMPORT。
- 不支持 LIMIT 子句的条件下推。Spark SQL 发起程序 SHOW 命令可能显示有限数量的行,但会导入所有行。
- 如果远程系统时区与发起程序系统时区不同,则 WHERE 子句中使用的日期文本不会转换为远程系统时区。
- 与 WHERE 子句中的 DATE 进行比较可能会产生错误结果。
- 在运行 SELECT 查询(例如在 Spark Shell 上显示结果)时,预计该查询将从 Teradata 传输大量行,Teradata 建议尽可能在查询中添加 LIMIT 子句。