嘿,我有一个使用JDBI改变表分区的问题。下面是我尝试运行的查询的一个示例:
ALTER TABLE table1 DROP PARTITION P_1
当从表"table le1"中删除分区"P_1"时,这在MySQL中运行良好。
我在java代码中实现了如下:
@SqlUpdate("ALTER TABLE table1 DROP PARTITION :partition;")
public void deletePartition(@Bind("partition") String partition);
并这样调用此函数
deletePartition("P_1")
但是,这会导致以下错误:
导致:org.skife.jdbi.v2.异常。UnableToExecuteStateException:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,了解在第1行“P_1”附近使用的正确语法[语句:“ALTER TABLE table1 DROP PARTITION:PARTITION;”,位于:“ALTER TABLE table1 DROP PARTITION:PARTITION;”,重写:“/*HiveDropBoxDBI.deletePartition*/ALTER TABLE table1 DROP PARTITION?;”,参数:{位置:{},名称:{分区:“P_1”},查找器:[]}]
是否不支持此功能?还是我的语法遗漏了什么?
谢谢
不能对 DDL 使用绑定参数,例如 CREATE、
ALTER
和 DROP。
若要删除分区,必须改为将分区名称连接到查询上。
然而,取一个分区名并将其直接附加到执行的SQL字符串中会导致安全漏洞。考虑以下几点:
INFORMATION_SCHEMA.PARTITIONS
表以查看您尝试删除的分区是否存在。(如果在检查其存在和删除之间可能会创建或删除分区,这可能不是一个好主意。我对您的应用程序不够了解,无法判断这是否是一个问题。)由于JDBI依赖于用于@SqlUpdate
注释的常量字符串,因此您将无法以这种方式使用JDBI来删除分区,除非您只想删除相同的分区。
我们需要使用@定义来更改查询。@Binda仅用于绑定参数(如some_field=: value)。
@SqlUpdate("ALTER TABLE table1 DROP PARTITION :partition;")
public void deletePartition(@Bind("partition") String partition);
我是Postgresql的新手,不知道如何管理分区表 我有基于日期的分区表。在插入数据之前,触发器检查日期并将其放入相应的子表中 例如 2014年11月15日-插入名为11-15-2014_log的表格 2014年11月16日-插入名为11-16-2014_log的表格 现在我想创建一个函数来删除旧的子表,例如,超过90天的表。我应该根据表名查找并删除子表(因为它包含创建日期),还是应该在主表中查
我正在为我们的cassandra系统制定cassandra备份和恢复策略,并试图了解cassandra中的备份和稳定恢复是如何工作的。以下是我的观察和相关问题(我的需求是建立一个备用/备份集群,如果主集群关闭,它将成为活动的..所以我想让它们在数据方面保持同步,所以我想在我的活动集群上进行定期备份,并恢复到备用集群) 已进行快照备份。在卡桑德拉放下了一张桌子。停止了卡桑德拉,从快照备份中恢复(将表
我在配置单元中有orc表我想从这个表中删除列 但我遇到以下异常 执行配置单元查询时出错:OK失败:ParseException行1:35输入“USER_ID1”不匹配,在drop PARTITION语句中的“drop”附近需要分区 有谁能帮助我或提供任何想法来做这件事吗?注意,我正在
问题内容: 如何停止事件的处理或切换事件的功能? 修改后的代码: 问题答案: 您只需使用事件的新功能再次调用即可。既然你没有利用第三个参数,在此只是简单地覆盖任何已经存在。默认情况下,此参数为,但它也接受,它将在该事件已触发的回调中添加回调。 但是,如果您开始使用该可选参数,则需要使用该函数删除单个回调。当你调用一个返回。您可以将此作为第二个参数传递给。 例:
所以。烦人。 为简洁起见编辑: 类似问题的答案state将修复问题,但我做错了吗?因为它说它不匹配任何文件?也许是因为我运行了git重置?