试着去做 sqoop 导出自 HDFS 至 MYSQL . 由于输入文件和 MySQL . 输入文件中有数据 mm/dd/yyyy 格式where in SQL 是约会。我想是吧 MySQL 是 yyyy-mm-dd .因为同样的错误:原因:java.lang.runtimeexception:无法分析输入数据:“2/18/2019”我的限制,因为来源是从不同的供应商,我们不能要求他们改变它。那么在这种情况下我有什么选择呢?有什么建议吗
sqoop
HDFS
MYSQL
MySQL
mm/dd/yyyy
SQL
yyyy-mm-dd
5jdjgkvh1#
编辑不幸的是,这个答案可能不适合你。如果您使用的程序无法控制其源代码,则这对您没有帮助。我之所以不提这个问题,是因为这是我在rdbms编程新手中遇到的一个常见问题。原始答案你为什么把日期和时间当作弦呢?为此,为什么要为每一行构建sql?在mysql方面,有一个更好的方法来处理这个问题。大多数rdbms支持预处理语句的概念,尽管实现因供应商而异。java通过jdbc支持所有主要供应商的prepared语句风格,因此您不必担心实现细节。每次执行sql时,数据库引擎都会在应用或返回数据之前经历几个阶段。第一个也是最耗时的阶段,称为“准备”阶段,是分析sql字符串,并计算完成它的理想访问路径。50%到80%的sql“执行”时间都花在这个“准备”阶段。一个简单的优化是认识到成熟数据库中理想的访问路径很少发生变化,这允许程序员准备一次语句,将句柄返回到访问路径,然后仅将句柄及其参数从应用程序传递到数据库。这将访问路径计算、数据类型转换和网络通信的开销降至最低,同时自动防止sql注入攻击,并处理诸如日期格式化之类的管理问题。在java中,这用preparedstatement类表示。始终使用事先准备好的语句。如果使用得当,它们将减少50%到80%的数据库调用开销。它们还允许您通过使用本机java类型进行更简单的选择,并通过ps将值传递到执行中。使用preparedstatement还消除了对输入进行清理的许多需要。从本质上讲,除了目标将拒绝的字符外,您不需要担心特殊字符(例如:将代码大于127的字符放入仅在强制字符集的平台上为ascii构建的数据库)。如果需要将输入作为字符串并转换为日期,请使用java的dateformat类。
1条答案
按热度按时间5jdjgkvh1#
编辑
不幸的是,这个答案可能不适合你。如果您使用的程序无法控制其源代码,则这对您没有帮助。
我之所以不提这个问题,是因为这是我在rdbms编程新手中遇到的一个常见问题。
原始答案
你为什么把日期和时间当作弦呢?为此,为什么要为每一行构建sql?在mysql方面,有一个更好的方法来处理这个问题。
大多数rdbms支持预处理语句的概念,尽管实现因供应商而异。java通过jdbc支持所有主要供应商的prepared语句风格,因此您不必担心实现细节。
每次执行sql时,数据库引擎都会在应用或返回数据之前经历几个阶段。第一个也是最耗时的阶段,称为“准备”阶段,是分析sql字符串,并计算完成它的理想访问路径。50%到80%的sql“执行”时间都花在这个“准备”阶段。
一个简单的优化是认识到成熟数据库中理想的访问路径很少发生变化,这允许程序员准备一次语句,将句柄返回到访问路径,然后仅将句柄及其参数从应用程序传递到数据库。这将访问路径计算、数据类型转换和网络通信的开销降至最低,同时自动防止sql注入攻击,并处理诸如日期格式化之类的管理问题。
在java中,这用preparedstatement类表示。
始终使用事先准备好的语句。如果使用得当,它们将减少50%到80%的数据库调用开销。它们还允许您通过使用本机java类型进行更简单的选择,并通过ps将值传递到执行中。
使用preparedstatement还消除了对输入进行清理的许多需要。从本质上讲,除了目标将拒绝的字符外,您不需要担心特殊字符(例如:将代码大于127的字符放入仅在强制字符集的平台上为ascii构建的数据库)。
如果需要将输入作为字符串并转换为日期,请使用java的dateformat类。