کار با نماهای مادی شده

  • 2022-09-3

نمودارهای مادی به Enterprise Edition نیاز دارند. برای پرس و جو در مورد به روزرسانی ، لطفاً با پشتیبانی Snowflake تماس بگیرید.

نمای مادی یک مجموعه داده از پیش محاصره شده است که از مشخصات پرس و جو (انتخاب در تعریف مشاهده) گرفته شده و برای استفاده بعدی ذخیره می شود. از آنجا که داده ها از قبل محاسبه شده اند ، پرس و جو یک نمای مادی سریعتر از اجرای یک پرس و جو در برابر جدول پایه نمای است. این تفاوت عملکرد می تواند هنگام اجرای یک پرس و جو به طور مکرر یا به اندازه کافی پیچیده باشد. در نتیجه ، نماهای مادی می توانند باعث افزایش تجمع گران قیمت ، طرح ریزی و انتخاب ، به ویژه مواردی شوند که مرتباً اجرا می شوند و در مجموعه داده های بزرگ اجرا می شوند.

نماهای مادی برای بهبود عملکرد پرس و جو برای بارهای کاری متشکل از الگوهای پرس و جوهای مکرر متداول طراحی شده است. با این حال ، تحقق نتایج متوسط هزینه های اضافی را متحمل می شود. به همین ترتیب ، قبل از ایجاد هرگونه دیدگاه مادی ، باید در نظر بگیرید که آیا هزینه های آن با پس انداز از استفاده مجدد از این نتایج به اندازه کافی جبران می شود.

تصمیم گیری در مورد زمان ایجاد یک منظره مادی

نماهای مادی به ویژه وقتی مفید هستند:

نتایج پرس و جو حاوی تعداد کمی از ردیف ها و/یا ستون ها نسبت به جدول پایه است (جدول که در آن نمای تعریف شده است).

نتایج پرس و جو حاوی نتایج است که نیاز به پردازش قابل توجهی دارند ، از جمله:

تجزیه و تحلیل داده های نیمه ساختار یافته.

مصالح که برای محاسبه مدت زمان زیادی طول می کشد.

پرس و جو در یک جدول خارجی (یعنی مجموعه داده های ذخیره شده در پرونده ها در یک مرحله خارجی) قرار دارد ، که ممکن است عملکرد کندتر در مقایسه با پرس و جو از جداول پایگاه داده بومی داشته باشد.

جدول پایه نمایش به طور مکرر تغییر نمی کند.

مزایای نماهای مادی شده

اجرای Snowflake از نماهای مادی تعدادی از ویژگی های منحصر به فرد را ارائه می دهد:

نماهای مادی شده می توانند عملکرد نمایش داده شده هایی را که از همان نتایج فرعی به طور مکرر استفاده می کنند ، بهبود بخشد.

نماهای مادی به طور خودکار و شفاف توسط برف برف نگهداری می شوند. یک سرویس پس زمینه پس از ایجاد تغییرات در جدول پایه ، نمای مادی را به روز می کند. این کارآمدتر و مستعد خطای کمتر از حفظ دستی معادل یک نمای مادی در سطح برنامه است.

داده های قابل دسترسی از طریق نماهای مادی ، صرف نظر از میزان DML که در جدول پایه انجام شده است ، همیشه جاری است. اگر یک پرس و جو قبل از اینکه نمای مادی به روز شود اجرا شود ، Snowflake یا نمای مادی شده را به روز می کند یا از قسمت های به روز از نمای مادی استفاده می کند و داده های جدیدتر مورد نیاز را از جدول پایه بازیابی می کند.

نگهداری خودکار از دیدگاههای مادی اعتبار را مصرف می کند. برای اطلاعات بیشتر ، به هزینه های نگهداری برای نماهای مادی (در این موضوع) مراجعه کنید.

تصمیم گیری در مورد زمان ایجاد یک نمای مادی یا یک نمای منظم

به طور کلی ، هنگام تصمیم گیری در مورد ایجاد یک نمای مادی یا یک نمای منظم ، از معیارهای زیر استفاده کنید:

هنگامی که همه موارد زیر صحیح باشد ، یک نمای مادی ایجاد کنید:

نتایج پرس و جو از نظر اغلب تغییر نمی کند. این تقریباً همیشه بدان معنی است که جدول زیرین/پایه برای نمای اغلب تغییر نمی کند ، یا حداقل زیر مجموعه ردیف های جدول پایه مورد استفاده در نمای مادی اغلب تغییر نمی کند.

نتایج این نمای اغلب استفاده می شود (به طور معمول بیشتر از تغییر نتایج پرس و جو).

پرس و جو منابع زیادی را مصرف می کند. به طور معمول، این بدان معنی است که پرس و جو زمان پردازش یا اعتبارات زیادی را مصرف می کند، اما همچنین می تواند به این معنی باشد که پرس و جو فضای ذخیره سازی زیادی را برای نتایج میانی مصرف می کند.

هنگامی که هر یک از موارد زیر درست است یک نمای معمولی ایجاد کنید:

نتایج دیدگاه اغلب تغییر می کند.

نتایج اغلب مورد استفاده قرار نمی گیرند (نسبت به سرعت تغییر نتایج).

پرس و جو منابع فشرده نیست، بنابراین اجرای مجدد آن پرهزینه نیست.

این معیارها فقط دستورالعمل هستند. یک نمای مادی ممکن است حتی اگر اغلب استفاده نشود - به خصوص اگر نتایج کمتر از استفاده از نما تغییر کند، مزایایی را به همراه دارد.

همچنین، هنگام تصمیم گیری در مورد استفاده از یک نمای معمولی یا یک نمای مادی، عوامل دیگری نیز وجود دارد که باید در نظر گرفته شوند.

به عنوان مثال، هزینه ذخیره سازی نمای مادی شده یک عامل است. اگر نتایج خیلی زیاد مورد استفاده قرار نگیرند (حتی اگر بیشتر از تغییر استفاده شوند)، ممکن است هزینه های ذخیره سازی اضافی ارزش افزایش عملکرد را نداشته باشد.

مقایسه با جداول، نماهای معمولی و نتایج ذخیره شده در حافظه پنهان¶

نماهای مادی شده از جهاتی شبیه جداول و از جهات دیگر شبیه نماهای معمولی (یعنی غیر مادی) هستند. علاوه بر این، نماهای تحقق یافته شباهت هایی با نتایج ذخیره شده در حافظه پنهان دارند، به ویژه به این دلیل که هر دو امکان ذخیره نتایج پرس و جو را برای استفاده مجدد در آینده فراهم می کنند.

این بخش برخی از شباهت ها و تفاوت های بین این اشیاء را در مناطق خاص شرح می دهد، از جمله:

کاهش پیچیدگی منطق پرس و جو

خوشه بندی داده ها (مربوط به عملکرد پرس و جو).

هزینه های ذخیره سازی و نگهداری.

Snowflake نتایج پرس و جو را برای مدت کوتاهی پس از اجرای یک پرس و جو در حافظه پنهان نگه می دارد. در برخی شرایط، اگر همان پرس و جو دوباره اجرا شود و در جدول(هایی) که پرس و جو به آن دسترسی دارد چیزی تغییر نکرده باشد، Snowflake می تواند به سادگی همان نتایج را بدون اجرای مجدد پرس و جو برگرداند. این سریع ترین و کارآمدترین شکل استفاده مجدد است، اما کمترین انعطاف را نیز دارد. برای جزئیات بیشتر، استفاده از نتایج جستجوی ماندگار را ببینید.

هم نماهای تحقق یافته و هم نتایج پرس و جو در حافظه پنهان، مزایای عملکرد پرس و جو را ارائه می دهند:

نماهای مادی‌شده انعطاف‌پذیرتر از نتایج ذخیره‌شده هستند، اما معمولاً کندتر از نتایج ذخیره‌شده هستند.

نماهای مادی شده به دلیل «کش» (یعنی نتایج پرس و جو برای نما) سریعتر از جداول هستند. علاوه بر این، اگر داده‌ها تغییر کرده باشند، می‌توانند از «کش» خود برای داده‌هایی که تغییر نکرده‌اند استفاده کنند و از جدول پایه برای هر داده‌ای که تغییر کرده است استفاده کنند.

نماهای معمولی داده‌ها را در حافظه پنهان ذخیره نمی‌کنند و بنابراین نمی‌توانند عملکرد را با ذخیره‌سازی کش بهبود بخشند. با این حال، در برخی موارد، نماها به Snowflake کمک می کنند تا طرح پرس و جو کارآمدتری ایجاد کند. همچنین، هم نماهای واقعی و هم نماهای معمولی با اجازه دادن به داده ها در معرض یا پنهان شدن در سطح ردیف یا سطح ستون، امنیت داده ها را افزایش می دهند.

جدول زیر شباهت ها و تفاوت های کلیدی بین جداول، نماهای معمولی، نتایج پرس و جوهای ذخیره شده و نماهای تحقق یافته را نشان می دهد:

منطق پرس و جو را ساده می کند

از اعتبارات برای نگهداری استفاده می کند

نتیجه پرس و جو ذخیره شده

فقط در صورتی استفاده می‌شود که داده‌ها تغییر نکرده باشند و اگر پرس و جو فقط از توابع قطعی استفاده کند (مثلاً نه CURRENT_DATE).

الزامات نگهداری و نگهداری معمولاً منجر به افزایش هزینه ها می شود.

داده‌ها خارج از Snowflake نگهداری می‌شوند و بنابراین، هیچ هزینه ذخیره‌سازی در Snowflake متحمل نمی‌شوند.

نمونه هایی از موارد استفاده برای نماهای مادی شده¶

این بخش برخی از سناریوهای استفاده عمومی را توصیف می کند که همچنین یک نمای کلی مفهومی از دیدگاه های تحقق یافته ارائه می دهد:

فرض کنید که هر روز یک پرس و جو Q را اجرا می کنید که شامل یک پرس و جو فرعی S است. اگر S منبع فشرده است و داده‌هایی را جستجو می‌کند که فقط یک بار در هفته تغییر می‌کنند، می‌توانید با اجرای S و ذخیره کردن نتایج در جدولی به نام CT، عملکرد کوئری بیرونی Q را بهبود ببخشید:

شما فقط هفته ای یک بار جدول را به روز می کنید.

بقیه زمان‌ها، وقتی Q را اجرا می‌کنید، به نتایج subquery S که در جدول ذخیره شده بود اشاره می‌کند.

تا زمانی که نتایج جستجوی فرعی S به طور قابل پیش بینی تغییر کند (به عنوان مثال هر هفته در همان زمان) به خوبی کار می کند.

با این حال، اگر نتایج S به طور غیر قابل پیش بینی تغییر کند، ذخیره نتایج در یک جدول خطرناک است. گاهی اوقات پرس و جو اصلی شما Q نتایج قدیمی را نشان می دهد اگر نتایج پرس و جو فرعی S قدیمی باشد (و بنابراین نتایج CT جدول ذخیره شده در حافظه پنهان قدیمی هستند).

در حالت ایده‌آل، نوع خاصی از حافظه پنهان را برای نتایجی می‌خواهید که به ندرت تغییر می‌کنند، اما زمان‌بندی تغییر برای آن‌ها غیرقابل پیش‌بینی است. با نگاهی دیگر به آن، می‌خواهید در صورت لزوم، درخواست فرعی S خود را مجبور کنید دوباره اجرا شود (و CT جدول کش شما به‌روزرسانی شود).

یک نمای مادی شده تقریبی از بهترین های هر دو جهان را اجرا می کند. شما یک پرس و جو برای نمای واقعی خود تعریف می کنید، و نتایج پرس و جو در حافظه پنهان ذخیره می شوند (انگار در یک جدول داخلی ذخیره شده اند)، اما Snowflake زمانی که جدولی که نمای مادی شده روی آن تعریف شده است، به روز می شود، حافظه پنهان را به روز می کند. بنابراین، نتایج جستجوی فرعی شما برای عملکرد سریع به راحتی در دسترس است.

به عنوان یک مثال نه چندان انتزاعی، فرض کنید که شعبه کوچکی از یک داروخانه بزرگ را اداره می کنید و شعبه شما صدها دارو از مجموع ده ها هزار داروی مورد تایید FDA را در اختیار دارد.

همچنین فرض کنید که فهرست کاملی از تمام داروهایی که هر یک از مشتریانتان مصرف می‌کنند دارید و تقریباً همه آن مشتریان فقط داروهای موجود را سفارش می‌دهند (یعنی سفارش‌های ویژه نادر هستند).

در این سناریو، می‌توانید یک نمای واقعی ایجاد کنید که فقط تداخلات بین داروهایی را که در انبار نگهداری می‌کنید فهرست می‌کند. وقتی مشتری دارویی را سفارش می‌دهد که قبلاً هرگز استفاده نکرده است، اگر هم آن دارو و هم تمام داروهای دیگری که مصرف می‌کند تحت پوشش دیدگاه واقعی شما باشند، نیازی نیست که کل پایگاه داده FDA را برای تداخلات دارویی بررسی کنید. شما فقط می توانید نمای واقعی را بررسی کنید، بنابراین جستجو سریعتر است.

شما می توانید از یک نمای مادی شده به تنهایی استفاده کنید، یا می توانید از آن در یک Join استفاده کنید.

در ادامه مثال داروخانه، فرض کنید که یک جدول دارید که تمام داروهایی را که هر یک از مشتریان شما مصرف می‌کنند فهرست می‌کند. می توانید آن جدول را به نمای واقعی تداخلات دارویی بپیوندید تا بفهمید کدام یک از داروهای فعلی مشتری ممکن است با داروی جدید تداخل داشته باشد.

ممکن است از یک اتصال بیرونی استفاده کنید تا مطمئن شوید که همه داروهای مشتری را فهرست می‌کنید، خواه این داروها در دید واقعی شما باشند یا نباشند. اگر اتصال بیرونی نشان داد که هیچ یک از داروهای فعلی در نمای واقعی نیستند، می توانید پرس و جو را در جدول کامل تداخلات دارویی دوباره اجرا کنید.

چگونه Query Optimizer از Views Materialized استفاده می کند¶

برای استفاده از نما، نیازی به تعیین نمای تحقق یافته در دستور SQL ندارید. بهینه ساز پرس و جو می تواند به طور خودکار پرس و جوها را بر اساس جدول پایه یا نماهای معمولی بازنویسی کند تا به جای آن از نمای تحقق یافته استفاده کند.

به عنوان مثال ، فرض کنید که یک نمای مادی شامل تمام ردیف ها و ستون هایی است که توسط یک پرس و جو در برابر یک جدول پایه مورد نیاز است. بهینه ساز می تواند تصمیم بگیرد که به جای جدول پایه ، پرس و جو را برای استفاده از نمای مادی بازنویسی کند. این می تواند به طرز چشمگیری یک پرس و جو را سرعت بخشد ، به خصوص اگر جدول پایه حاوی مقدار زیادی از داده های تاریخی باشد.

به عنوان نمونه دیگر ، در یک پیوستن به چند جدول ، ممکن است بهینه ساز تصمیم بگیرد که به جای یک جدول برای یکی از جداول موجود در پیوستگی ، از یک نمای مادی استفاده کند.

حتی اگر یک نمای مادی بتواند جدول پایه را در یک پرس و جو خاص جایگزین کند ، ممکن است بهینه ساز از نمای مادی استفاده نکند. به عنوان مثال ، اگر جدول پایه توسط یک زمینه خوشه بندی شود ، ممکن است بهینه ساز را انتخاب کند تا جدول پایه را اسکن کند (به جای نمای مادی) زیرا بهینه ساز می تواند به طور موثری پارتیشن ها را هرس کند و با استفاده از جدول پایه عملکرد معادل را ارائه دهد.

از یک نمای مادی همچنین می توان به عنوان منبع داده برای یک زیرمجموعه استفاده کرد.

هنگامی که Optimizer تصمیم می گیرد از یک نمای مادی به طور ضمنی استفاده کند ، نمای مادی شده در برنامه توضیح یا مشخصات پرس و جو به جای جدول پایه ذکر شده است. شما می توانید از این اطلاعات برای آزمایش و درک اینکه کدام پرس و جوها می توانند از دیدگاههای مادی موجود بهره مند شوند ، استفاده کنید.

درباره نماهای مادی در Snowflake¶

بخش های بعدی توضیح می دهد که چگونه نماهای مادی در برف برف نشان داده شده است.

دستورات DDL برای نماهای مادی شده

نماهای مادی شده اشیاء پایگاه داده درجه یک هستند. Snowflake دستورات DDL زیر را برای ایجاد و حفظ نماهای مادی ارائه می دهد:

عملیات DML در نماهای مادی شده

Snowflake اجازه نمی دهد DML استاندارد (به عنوان مثال درج ، به روزرسانی ، حذف) در نماهای مادی. Snowflake به کاربران اجازه نمی دهد تا نماهای مادی را کوتاه کنند.

دسترسی به امتیازات کنترل

سه نوع امتیاز وجود دارد که مربوط به نماهای مادی است:

امتیازات مربوط به طرحواره ای که حاوی نمای مادی است.

به طور مستقیم در مورد دیدگاه مادی امتیاز می یابد.

امتیازات در مورد اشیاء پایگاه داده (به عنوان مثال جداول) که نمای مادی به آن دسترسی پیدا می کند.

می توانید از دستورات استاندارد برای اعطای و ابطال امتیازات در نماهای مادی استفاده کنید:

امتیازات مربوط به طرحواره یک نمای مادی

نماهای مادی شده فضای ذخیره سازی را مصرف می کنند. برای ایجاد یک منظره مادی ، شما نیاز به امتیاز نمای مادی شده بر روی طرحواره ای دارید که شامل نمای مادی باشد. شما باید بیانیه ای مشابه با:

برای اطلاعات بیشتر در مورد بیانیه کمک هزینه ، به گرانت مراجعه کنید.

امتیازات در نمای مادی

نماهای مادی ، مانند سایر اشیاء پایگاه داده (جداول ، نمایش ، UDF و غیره) متعلق به یک نقش هستند و دارای امتیازاتی هستند که می توانند به سایر نقش ها اعطا شوند.

می توانید امتیازات زیر را در یک نمای مادی اعطا کنید:

همانطور که با نماهای غیر مادی ، یک نمای مادی به طور خودکار امتیازات جدول پایه خود را به ارث نمی برد. شما باید صریحاً از دیدگاه مادی به نقش هایی که باید از آن دیدگاه استفاده کنند ، امتیازاتی اعطا کنید.

استثناء این قاعده زمانی است که بهینه ساز پرس و جو یک پرس و جو را در برابر جدول پایه بازنویسی می کند تا از نمای مادی استفاده کند (همانطور که در نحوه استفاده بهینه ساز پرس و جو از نماهای مادی استفاده می شود). در این حالت ، کاربر برای استفاده از نمای مادی برای دسترسی به نتایج پرس و جو نیازی به امتیازات ندارد.

امتیازات مربوط به اشیاء پایگاه داده دسترسی به نمای مادی شده

همانطور که با نماهای غیر مادی ، کاربری که مایل به دسترسی به یک نمای مادی است ، فقط به نمای نیاز دارد ، نه بر روی شیء (های) زیربنایی که این نمایش به آن اشاره می کند.

نماهای مادی شده ایمن¶

نماهای مادی شده می توانند نماهایی امن باشند.

بیشتر اطلاعات در مورد نماهای ایمن برای نماهای تحقق یافته ایمن اعمال می شود. چند مورد وجود دارد که نماهای مادی شده ایمن با نماهای غیر مادی ایمن متفاوت است. تفاوت ها عبارتند از:

فرمان برای یافتن اینکه آیا یک View ایمن است یا خیر.

برای نماهای غیر مادی، ستون IS_SECURE را در خروجی فرمان SHOW VIEWS بررسی کنید.

برای مشاهده های واقعی، ستون IS_SECURE را در خروجی فرمان SHOW MATERIALIZED VIEWS بررسی کنید.

برای اطلاعات بیشتر درباره نماهای ایمن، به کار با نماهای امن مراجعه کنید.

نحو برای ایجاد نماهای مادی شده ایمن در CREATE MATERIALIZED VIEW مستند شده است.

ایجاد و کار با نماهای مادی شده¶

این بخش اطلاعاتی در مورد ایجاد و کار با نماهای تحقق یافته ارائه می دهد.

برنامه ریزی برای ایجاد یک نمای مادی شده¶

هنگام تصمیم گیری برای ایجاد یک نمای مادی، انجام برخی تحلیل ها را برای تعیین نیاز به دیدگاه در نظر بگیرید:

فیلترها، پیش‌بینی‌ها و انبوهی از پرس‌و‌جوهایی که مکرر یا گران هستند را بررسی کنید.

از نمایه پرس و جو و دستور EXPLAIN استفاده کنید تا ببینید آیا نماهای موجود در حال حاضر توسط ویژگی بازنویسی خودکار پرس و جو استفاده می شود یا خیر. اگر نماهای موجود که به خوبی با پرس و جوها مطابقت دارند، ممکن است متوجه شوید که نیازی به ایجاد نماهای واقعی جدید ندارید.

قبل از افزودن نماهای تحقق‌یافته، هزینه‌ها و عملکرد درخواست فعلی را ثبت کنید تا بتوانید پس از ایجاد نمای واقعی جدید، تفاوت را ارزیابی کنید.

اگر جستارهایی با فیلترهای بسیار انتخابی پیدا کردید که از خوشه‌بندی جدول سودی نمی‌برند، یک نمای مادی که حاوی فیلترهای یکسان است می‌تواند به پرس‌و‌جوها کمک کند از اسکن داده‌های زیاد جلوگیری کنند.

به طور مشابه، اگر پرس و جوهایی پیدا کردید که از تجمیع استفاده می کنند، یا حاوی عباراتی هستند که ارزیابی آنها بسیار گران است (به عنوان مثال، فراخوانی های تابع گران قیمت، یا عملیات گران روی داده های نیمه ساختاریافته)، سپس نماهایی تحقق یافته که از همان عبارت(های) استفاده می کند. یا تجمیع (ها) می تواند یک مزیت ارائه دهد.

دستور EXPLAIN را در برابر جستارهای اصلی اجرا کنید، یا پرس و جوها را اجرا کنید و نمایه پرس و جو را بررسی کنید تا ببینید آیا نمای واقعی شده جدید در حال استفاده است یا خیر.

هزینه‌های پرس و جو و نمای تحقق‌یافته را نظارت کنید و ارزیابی کنید که آیا عملکرد یا مزایای هزینه، هزینه نگهداری نمای تحقق‌یافته را توجیه می‌کند یا خیر.

هزینه های پرس و جو جدول پایه را نیز بررسی کنید. در مواردی که بهینه ساز می تواند پرس و جو را بازنویسی کند تا از نمای واقعی استفاده کند، کامپایل پرس و جو می تواند زمان و منابع بیشتری را مصرف کند.(بهینه ساز تعداد بیشتری از امکانات برای در نظر گرفتن دارد.)

به یاد داشته باشید که اگر پرس و جوهای شما را ساده می کند یا می دانید که نمای مادی شده عملکرد بهتری به شما می دهد، همیشه می توانید مستقیماً به نماهای تحقق یافته ارجاع دهید. با این حال، در بیشتر موارد، می توانید به سادگی جدول پایه را پرس و جو کنید و ویژگی بازنویسی پرس و جو خودکار این کار را برای شما انجام می دهد.

ایجاد نمای مادی شده¶

از دستور CREATE MATERIALIZED VIEW برای ایجاد نمای مادی شده استفاده کنید. به عنوان مثال، به مثال پایه: ایجاد نمای مادی شده (در این مبحث) مراجعه کنید.

به موارد زیر توجه کنید:

در صورت امکان، از نام کاملاً واجد شرایط برای جدول پایه که در نمای مادی ارجاع داده شده است استفاده کنید. این نما را از تغییراتی که می تواند نما را باطل کند، محافظت می کند، مانند انتقال جدول پایه به یک طرحواره متفاوت از نما (یا برعکس).

اگر نام جدول پایه واجد شرایط نباشد و جدول یا نمای به طرحی متفاوت منتقل شود، مرجع نامعتبر می شود.

اگر بیش از یک بار در تعریف نمای به جدول پایه مراجعه می کنید ، در تمام منابع به جدول پایه از همان صلاحیت استفاده کنید. به عنوان مثال ، اگر تصمیم دارید از نام کاملاً واجد شرایط استفاده کنید ، اطمینان حاصل کنید که همه منابع به جدول پایه از نام کاملاً واجد شرایط استفاده می کنند.

اگر هنگام ایجاد یک نمای مادی (به عنوان مثال در آن ستون_1 بین y و z) فیلتر را مشخص کنید ، بهینه ساز می تواند از نمای مادی شده برای نمایش پرس و جو در برابر جدول پایه که دارای همان فیلتر یا فیلتر محدود کننده تر هستند ، استفاده کند. در اینجا چند مثال آورده شده است:

در اینجا یک مثال ساده از زیرنویس محدوده آورده شده است. در این مثال ، فیلتر موجود در پرس و جو با فیلتر در نمای مادی مطابقت ندارد. با این حال ، فیلتر موجود در پرس و جو فقط ردیف هایی را که در نمای مادی قرار دارند ، انتخاب می کند ، بنابراین بهینه ساز می تواند به جای کل جدول ، نمای مادی را اسکن کند.

این مثال نشان می دهد یا فرومایه. نمای مادی شامل تمام ردیف هایی است که به پرس و جو بعدی نیاز دارد.

یک نمای مادی را تعریف کنید که شامل تمام ردیف هایی است که دارای مقدار x یا مقدار y هستند:

یک پرس و جو را تعریف کنید که فقط به ارزش y (که در نمای مادی گنجانده شده است):

پرس و جو فوق را می توان در داخل به صورت داخلی بازنویسی کرد:

این مثال نمونه دیگری از فرومایه است. هیچ تعریف صریح یا در تعریف مادی وجود ندارد. با این حال ، یک بند IN معادل یک سری یا عبارات است ، بنابراین بهینه ساز می تواند این پرس و جو را به همان روشی که دوباره نمونه یا زیرنویس فوق را دوباره نوشت ، دوباره بنویسید:

یک پرس و جو را تعریف کنید که فقط به ارزش y (که در نمای مادی گنجانده شده است):

پرس و جو فوق را می توان در داخل به صورت داخلی بازنویسی کرد:

این مثال از زیر و زیر استفاده می کند:

نمای مادی ایجاد کنید که شامل تمام ردیف هایی باشد که در آن ستون_1 = x قرار دارد.

پرس و جو را می توان بازنویسی کرد:

پرس و جو بازنویسی حتی نیازی به شامل Column_1 = X ندارد زیرا تعریف نمای مادی شده در حال حاضر نیاز دارد که همه ردیف ها با ستون_1 = x مطابقت داشته باشند.

مثال زیر زیرمجموعه کل را نشان می دهد:

نمای مادی شده در زیر تعریف شده است:

پرس و جو زیر می تواند از نمای مادی شده تعریف شده در بالا استفاده کند:

پرس و جو را می توان بازنویسی کرد:

پرس و جو بازنویسی شده از گروه بندی اضافی توسط Column_2 استفاده نمی کند ، اما پرس و جو بازنویسی شده توسط آن گروه بندی اضافی مسدود نمی شود.

بیانیه نمای مادی شده ممکن است زمان قابل توجهی برای تکمیل داشته باشد.

هنگامی که یک نمای مادی برای اولین بار ایجاد می شود ، Snowflake معادل عملکرد CTAS (ایجاد جدول ... به عنوان….) را انجام می دهد.

محدودیت در ایجاد نماهای مادی شده

این محدودیت های فعلی است. برخی از آنها ممکن است در نسخه های آینده حذف یا تغییر کنند.

محدودیت های زیر برای ایجاد نماهای مادی اعمال می شود:

یک نمای مادی می تواند فقط یک جدول واحد را پرس و جو کند.

پیوستن ، از جمله خودجوش ، پشتیبانی نمی شود.

یک نمای مادی نمی تواند پرس و جو کند:

یک نمای مادی

یک نمای غیر مادی.

UDTF (عملکرد جدول تعریف شده توسط کاربر).

یک نمای مادی نمی تواند شامل موارد زیر باشد:

UDF ها (این محدودیت در مورد انواع توابع تعریف شده توسط کاربر ، از جمله توابع خارجی) اعمال می شود.

سفارش به بند.

گروه توسط کلیدهایی که در لیست انتخاب نیستند. همه گروه ها توسط کلیدها در یک نمای مادی باید بخشی از لیست انتخاب باشند.

گروه با گروه بندی مجموعه.

گروه توسط Rollup.

لانه سازی زیرمجموعه ها در یک نمای مادی.

بسیاری از توابع کل در یک تعریف دید مادی مجاز نیستند.

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.