我们的Oracle 9i数据库中有一些物化视图,这些视图是很久以前由一个不再在这里工作的人创建的.是否有一种简单(或任何)方法来确定Oracle是否使用这些视图来提供查询?如果它们不再被使用,我们想要摆脱它们.但是我们不想发现这些观点是允许一些随机报告在不到几个小时内运行的事实.我梦想的答案就像是
SELECT last_used_date FROM dba_magic
WHERE materialized_view_name = 'peters_mview'
Run Code Online (Sandbox Code Playgroud)
更棒的是可以告诉我实际的SQL查询使用物化视图的东西.我意识到我可能不得不满足于此.
如果有一个需要10g的解决方案,我们很快就会升级,所以这些答案也会很有用.
物化视图中的强制刷新和完全刷新有什么区别
CREATE MATERIALIZED VIEW MV1 REFRESH FORCE ON DEMAND AS SELECT * FROM T1;
CREATE MATERIALIZED VIEW MV1 REFRESH COMPLETE ON DEMAND AS SELECT * FROM T1;
CREATE MATERIALIZED VIEW MV1 REFRESH ON DEMAND AS SELECT * FROM T1;
Run Code Online (Sandbox Code Playgroud)
需要这些陈述之间的简短区别吗?
我创建了一个包含以下信息的物化视图.
CREATE MATERIALIZED VIEW EMPLOYEE_INFO
AS
SELECT * FROM EMPLOYEE_TABLE WHERE LOCATION = 'Brazil'
Run Code Online (Sandbox Code Playgroud)
我最初没有为这个MV添加任何刷新间隔.现在,我需要每天在0000HRS刷新这个MV.以下命令是否可以帮助我每天在0000HRS更改它?
ALTER MATERIALIZED VIEW EMPLOYEE_INFO
REFRESH COMPLETE
START WITH SYSDATE
Run Code Online (Sandbox Code Playgroud)
如果我需要每6小时更新一次,我该如何进行?可能吗?
我在客户端上运行Oracle 11g和SQL Developer.我有一个物化视图,我想转换成普通的表.怎么办?
我想出的唯一方法是创建一个具有相同结构的表,从MV导出数据并将其导入表中.但是要做到这一点,我必须手动创建表的所有字段(30+)以匹配MV中的字段.所以我认为必须有更好的解决方案?
我的朋友创建了一个物化视图,但该视图没有从 Mater 表接收新数据。视图仅在创建时接收数据,之后不包含新闻数据。
任何人都可以帮我解决这个问题吗?
在我的物化视图下休憩。
CREATE or REPLACE MATERIALIZED VIEW DATABASE.MyMatView
LOGGING
TABLESPACE SDBANCO
PCTFREE 10
INITRANS 2
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOCOMPRESS
NOCACHE
NOPARALLEL
REFRESH ON DEMAND
FORCE
DISABLE QUERY REWRITE
AS
SELECT * FROM .....
Run Code Online (Sandbox Code Playgroud)
谢谢,
马修斯·洛扎诺
我们正在使用以下物化视图和基础视图来实现某些报告。从我们的应用程序中完全手动刷新了实例化视图(通过DBMS_SNAPSHOT.REFRESH('“ OVERALL_WEEKLY”','C');)。在此调用之后,视图处于FRESH状态,但是在对基础表执行任何DML操作之后,实例化视图将变为NEEDS_COMPILE状态。查询视图如下。无关紧要的表EBR_CYCLE_TIME和EBR_AREA经常更改。因此,提交刷新不是我们的选择。
有什么办法可以避免NEEDS_COMPILE状态?或者更好是什么导致NEED_COMPILE状态?
CREATE OR REPLACE FORCE VIEW "OTD_WEEKLY" AS
SELECT
otd.WEEK,
otd.SITE_ID,
otd.AREA_ID,
otd.OTD_METRIC AS CT_METRIC,
ROUND(100 * (SUM(otd.SUCCESS) / SUM(otd.CT_TOTAL_COUNT)), 2) AS OTD_VALUE
FROM
(SELECT
FC.MFL_FISCAL_YR_NUM * 100 + FC.MFL_FISCAL_WK_NUM AS WEEK,
r.BUSINESS_UNIT_ID AS PAL2_ID,
a.site_id AS SITE_ID,
a.area_def_id AS AREA_ID,
a.PRIORITY AS PRIORITY,
r.EBR_BUILD_SUBTYPE AS NPI,
r.CORPORATE_TD AS CTD,
ctd.NAME AS OTD_METRIC,
COUNT(r.ebr_number) AS CT_TOTAL_COUNT,
COUNT(
CASE
WHEN (ct.TIME_ELAPSED) > (ct.TARGET * 86400)
THEN NULL
ELSE r.ebr_number
END) AS SUCCESS,
COUNT(
CASE
WHEN (ct.TIME_ELAPSED) > (ct.TARGET * …Run Code Online (Sandbox Code Playgroud) 我有一个物化视图,当我们的数据管道完全刷新时,它有时会被删除。有没有办法在查询中包含一些逻辑以刷新它是否存在,如果不存在,则创建它?
像这样的东西
refresh materialized view my_mat_view
if my_mat_view does not exist then execute the code below
create materialized view my_mat_view as select * from table
Run Code Online (Sandbox Code Playgroud) 我有物化视图,它非常有帮助。但使用一段时间后,我遇到了问题,视图中的顺序被破坏了。我将 Matview 创建为:
CREATE MATERIALIZED VIEW mat_view_sorted_products AS
SELECT item.id, item.category_id FROM item
INNER JOIN stock ON stock.item_id = item.id
ORDER BY is_available DESC, views DESC;
CREATE UNIQUE INDEX mat_view_index_id ON mat_view_sorted_products (id);
Run Code Online (Sandbox Code Playgroud)
ORDER BY 在我的例子中是非常重要的事情,所以当我从 Matview 查询并获得连接表的排序结果时它会起作用:
SELECT id FROM mat_view_sorted_products
LIMIT 100 OFFSET 0; //got 100 sorted item ids by (is_available DESC, views DESC)
Run Code Online (Sandbox Code Playgroud)
要刷新物化视图,我使用:REFRESH MATERIALIZED VIEW CONCURRENTLY mat_view_sorted_products
但经过一段时间和多次刷新迭代后,我发现 matview 记录的顺序被打破了。我认为同时更新空闲(读取)记录的值并且不更改其他任何内容。
不是?它是如何工作的以及如何在刷新视图时不破坏订单?
聚苯乙烯
如果我在没有并发的情况下进行刷新,它会恢复正常排序。它会阻止视图、清理视图并按顺序从选择中恢复。但用户没有时间每次View刷新时都等待
更新:
当然,我在完整的 SELECT 语句中使用顺序:
SELECT id, name, views FROM item WHERE …Run Code Online (Sandbox Code Playgroud) 我正在尝试更新基表中的列,该列是物化视图中的分区键,并尝试了解其在生产环境中的性能影响.
基表:
CREATE TABLE if not exists data.test
( ?foreignid uuid,
? id uuid,?
kind text,
? version text,?
createdon timestamp,?
**certid** text,
? PRIMARY KEY(foreignid,createdon,id)? );
Run Code Online (Sandbox Code Playgroud)
物化视图:
CREATE MATERIALIZED VIEW if not exists data.test_by_certid
AS? SELECT *?FROM data.test? WHERE id IS NOT NULL AND foreignid
IS NOT NULL AND createdon IS NOT NULL AND certid IS NOT NULL
PRIMARY KEY (**certid**, foreignid, createdon, id);
Run Code Online (Sandbox Code Playgroud)
因此,certid是物化视图中的新分区键
发生了什么:
1. When we first insert into the test table , usually the certids …Run Code Online (Sandbox Code Playgroud) data-modeling materialized-views cassandra scylla cassandra-3.0
在Snowflake中运行时,以下命令:
CREATE MATERIALIZED VIEW MV_CUSTOMER_PREFERENCE as select * from V_CUSTOMER_PREFERENCE;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
SQL编译错误:位置{1}处的错误行{0}为错误的实例化视图定义。视图定义中引用了多个表
V_CUSTOMER_PREFERENCE是一个现有的并且起作用的视图(可以单独查询),该视图连接了来自不同表的信息。当我放置原始查询而不是视图时,会遇到相同的错误,这只是一个漫长而复杂的SQL查询。
视图中的查询可能有什么问题?我无法从错误说明中了解它,也没有在https://docs.snowflake.net/manuals/user-guide/views-materialized.html中找到相关限制
我有 3 个大表(>100 GB,每个表有数百万行):events、page_views和sessions。这些表通过 1-n 关系连接,请参见下面的表设置。我正在尝试创建一个非规范化events_wide表,其中包含每个事件的一行,其中相应的page_views和sessions列被连接。这个想法是消除复杂分析查询所需的联接,因为这些联接速度很慢。
我创建了一个物化视图,它将和表events_mv连接到事件表。每当将新事件插入到 中时,物化视图应将一行插入到 中,自动连接 page_view 和会话。但是,当我插入一个新事件时,查询要么无法完成,要么因内存不足错误而终止。page_viewssessionseventsevents_wide
events即使从到运行这个简单的连接查询也会page_views导致内存不足错误:Memory limit (for user) exceeded: would use 99.21 GiB。我使用具有 24+ GB RAM 的 ClickHouse Cloud 生产实例:
SELECT
-- Select columns from events and page_views
FROM events AS e
LEFT JOIN page_views AS p ON p.property_id = e.property_id AND p.id = e.page_view_id
LIMIT 3;
Run Code Online (Sandbox Code Playgroud)
我尝试了 3 个表的不同主键排序 …
oracle ×6
postgresql ×2
sql ×2
cassandra ×1
clickhouse ×1
database ×1
join ×1
materialized ×1
oracle11g ×1
oracle9i ×1
scylla ×1
snowflake-cloud-data-platform ×1
views ×1