问题一:我们这边发现一个Hologres问题,不知道是不是设计如此?
我们这边发现一个Hologres问题,不知道是不是设计如此。
问题描述:我们现在hologres中有几张表开启了binlog,然后通过flink去消费hologres的binlog数据,可以正常消费(会自动创建Publication并关联表)。如果我们把hologres中的表删除了,pg_publication_tables里面的数据会删除,pg_publication不会删除。我们再重新创建hologres表后,flink消费时,Publication就不会自动关联表了,就会报错。
解决方案:删除hologres表时,再手动删除PUBLICATION。
参考回答:
Hologres目前存在的问题是,当删除带有 binlog 的表时,对应的 Publication 记录没有被同步删除,导致再次创建表后无法与 Publication 自动关联。您提供的解决方案是正确的,即手动删除 Publication 记录以解决问题。
这个情况可能是由于 Hologres 当前的设计缺陷引起的,建议您及时联系技术支持团队报告这一问题,以便尽快修复这一问题。同时,也可以考虑在每次删除表前,检查是否有相关的 Publication 记录,如有则一并删除,避免出现类似的问题。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/568924
问题二:Hologres现在主键重复写入 无法保证保留最后吗?
Hologres现在主键重复写入 无法保证保留最后吗?When there are multiple inserting data records for a primary key, 'keep_last' or 'keep_first' cannot be strictly guaranteed. (The currently guaranteed semantics is 'keep_any').
hg_experimental_affect_row_multiple_times_keep_last 这个参数已经配置了
参考回答:
是的,根据您提供的信息,Hologres确实存在无法严格保证主键重复写入时保留最后一条记录的情况。这是因为在Hologres中,当遇到主键冲突时,默认的行为是放弃所有冲突的插入操作,并返回错误信息。如果此时有多个插入操作都涉及到了相同的主键,则只能保留其中之一,而不能确定保留哪一条记录。
为了解决这个问题,Hologres提供了实验性的参数 hg_experimental_affect_row_multiple_times_keep_last
来控制这种行为。如果设置了这个参数,则当发生主键冲突时,Hologres将尽力保留最后一次插入的操作结果,而不是随意放弃任何一次插入操作的结果。不过需要注意的是,这个参数是一个实验性特性,可能存在一些不稳定或未知的问题,所以在使用时还需要谨慎对待。
在实际的使用场景中,为了避免主键重复写入的问题,建议您尽可能减少一次事务中涉及主键冲突的插入操作的数量。如果无法避免这种情况,可以考虑使用其他的数据库操作或查询方式,如分页查询、批量插入等,以减少主键冲突的风险。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/568923
问题三:请问一下,往hologres里面upsert数据。hologres支持一批事物的数据写入嘛?
请问一下,往hologres里面upsert数据。上游业务库的变更是多条数据变更在一个事物里面。hologres支持一批事物的数据写入嘛?
参考回答:
Hologres支持UPSERT操作,即在插入数据时如果主键存在重复的行数据,则对该数据执行更新或跳过操作。具体的语法格式是:INSERT INTO [ AS ] [ ( [, ...] ) ] VALUES ... ON CONFLICT DO UPDATE SET [, ...] [WHERE ];。
Hologres目前仅支持DDL的显式事务,并不支持单纯的DML事务,也不支持DDL和DML混合的事务。这意味着,尽管语法上可以通过多个DML语句组成的事务,但实际并不支持原子提交和回滚。因此,如果您的业务库在一个事物中有多个数据变更,那么这些变更不能保证全部成功或者全部失败,可能存在部分成功部分失败的情况。
本文为您介绍在Hologres中INSERT ON CONFLICT语句的用法。https://help.aliyun.com/zh/hologres/user-guide/insert-on-conflict?spm=a2c4g.11186623.0.i61
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/568922
问题四:请问:我在dataworks上 创建了10个hologres作业,那么这10个任务的资源怎么划分呢?
请问:我在dataworks上 创建了10个hologres作业,让他们同时调度。这10个任务在同一个计算组里面,那么这10个任务的资源怎么划分呢?
参考回答:
在DataWorks中,当您创建多个Hologres作业并让它们同时调度时,这些作业会在同一个计算组中运行。DataWorks会根据您为计算组分配的资源来划分这10个任务的资源。
您可以在DataWorks的计算资源管理页面为计算组分配CPU和内存资源。DataWorks会根据您分配的资源以及当前系统中可用的资源来动态调整每个任务的资源分配。
您可以通过MaxCompute资源面板,查看在MaxCompute计算引擎中存在的资源、资源的变更历史,并可以一键添加资源文件至数据开发面板的业务流程中。https://help.aliyun.com/zh/dataworks/user-guide/manage-maxcompute-resources?spm=a2c4g.11186623.0.i53
chttps://developer.aliyun.com/ask/568921
问题五:Hologres我想要查看某个实例下所有表的ddl,有相应的语法吗?
Hologres我想要查看某个实例下所有表的ddl,有相应的语法吗?
参考回答:
是的,Hologres支持查看某个实例下所有表的DDL语法。您可以使用以下SQL语句:
SELECT table_name, create_time, update_time, ddl FROM information_schema.tables WHERE table_schema = 'your_database_name';
请将your_database_name
替换为您要查看的数据库名称。
SELECT的常用方法如下:https://help.aliyun.com/zh/hologres/user-guide/select?spm=a2c4g.11186623.0.i39
FROM列表中的所有元素都会被计算( FROM中的每一个元素都是一个真实表或者虚拟表)。如果在FROM列表中指定了多于一个元素,得到的结果做并集。
如果指定了WHERE子句,所有不满足该条件的行都会被从输出中消除。
如果指定了GROUP BY子句或者如果有聚集函数,输出会被组合成由在一个或者多个值上匹配的行构成的分组,并且在其上计算聚集函数的结果。如果出现了HAVING子句,它会消除不满足给定条件的分组。
对于每一个被选中的行或者行组,会使用SELECT输出表达式计算实际的输出行。
通过使用操作符UNION、INTERSECT和EXCEPT,多于一个SELECT语句的输出可以被整合形成一个结果集。UNION操作符返回位于一个或者两个结果集中的全部行。INTERSECT操作符返回同时位于两个结果集中的所有行。EXCEPT操作符返回位于第一个结果集但不在第二个结果集中的行。在所有三种情况下,重复行都会被消除(除非指定ALL)。可以增加DISTINCT来显式的消除重复行。注意虽然ALL是SELECT自身的默认行为,但这里DISTINCT是默认行为。
如果指定了ORDER BY子句,被返回的行会以指定的顺序排序。如果没有给定ORDER BY,系统会以能最快产生行的顺序返回它们。
如果指定了LIMIT(或FETCH FIRST) 或者OFFSET子句,SELECT语句只返回结果行的一个子集。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/568920