日期 sparksql hive sql mysql语句between and >= <= 的边界问题

本文探讨了在限定日期范围查询时,BetweenAnd与大于等于及小于等于运算符的区别。特别指出使用BetweenAnd时,默认截止时间为当天的00:00:00,可能导致部分数据遗漏。

如图    between and和   >=  <=   结果一样   填坑

使用between and 限定日期需要注意,如果and后的日期是到天的,那么默认为00:00:00 例如:and 后的日期为2017年04月06日,就等价于2017-04-06 00:00:00 ,那么2017-04-06 15:10:34的数据就查不到了

### 可能存在的问题及解决办法 #### 字符编码问题 连接串中使用 `characterEncoding=UTF-8` 是为了确保与数据库之间的字符编码为 UTF - 8。若在数据读写时出现中文乱码,可检查数据库本身的字符集设置是否为 UTF - 8。如果数据库字符集设置不一致,即使连接串中指定了 `characterEncoding=UTF-8`,仍可能出现乱码问题。可通过以下 SQL 语句查看和修改 MySQL 数据库的字符集: ```sql -- 查看数据库字符集 SHOW CREATE DATABASE hive; -- 修改数据库字符集 ALTER DATABASE hive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### SSL 连接问题 `useSSL=false` 表示不使用 SSL 加密连接。在生产环境中,建议使用 SSL 连接以保证数据传输的安全性。若要启用 SSL 连接,可移除 `useSSL=false` 参数,并确保 MySQL 服务器端已正确配置 SSL。若在不使用 SSL 连接时出现连接问题,可检查 MySQL 服务器是否强制要求 SSL 连接。 #### 数据库创建问题 `createDatabaseIfNotExist=true` 表示如果指定的数据库 `hive` 不存在,则自动创建。若出现数据库创建失败的情况,可检查 MySQL 用户是否有创建数据库的权限。可通过以下 SQL 语句为用户授予创建数据库的权限: ```sql GRANT CREATE ON *.* TO 'your_username'@'your_host'; FLUSH PRIVILEGES; ``` #### 公钥检索问题 `allowPublicKeyRetrieval=true` 用于解决 MySQL 8.0 版本中客户端无法自动检索公钥的问题。若连接 MySQL 8.0 以下版本,可移除该参数。若使用 MySQL 8.0 版本且出现公钥检索失败的问题,可确保该参数已正确添加到连接串中。 ### 结合 Hive 元数据存储客户端实例化失败问题 Hive 元数据存储客户端实例化失败可能与 JDBC 连接串有关。若连接串配置错误,Hive 无法正常连接到 MySQL 数据库,从而导致客户端实例化失败。可检查 `hive-site.xml` 中关于元数据存储的 JDBC 连接配置是否正确: ```xml &lt;property&gt; &lt;name&gt;javax.jdo.option.ConnectionURL&lt;/name&gt; &lt;value&gt;jdbc:mysql://192.168.254.133:3306/hive?characterEncoding=UTF-8&amp;useSSL=false&amp;createDatabaseIfNotExist=true&amp;allowPublicKeyRetrieval=true&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;javax.jdo.option.ConnectionDriverName&lt;/name&gt; &lt;value&gt;com.mysql.cj.jdbc.Driver&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;javax.jdo.option.ConnectionUserName&lt;/name&gt; &lt;value&gt;your_username&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;javax.jdo.option.ConnectionPassword&lt;/name&gt; &lt;value&gt;your_password&lt;/value&gt; &lt;/property&gt; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值