بهترین شیوههای زیر، تکنیکهایی را برای توسعهی پرسوجوهای متمرکز بر حریم خصوصی و کارآمد در اختیار شما قرار میدهند. برای بهترین شیوههای خاص اجرای پرسوجوها در حالت نویز، به بخشهای مربوط به الگوهای پرسوجوی پشتیبانیشده و پشتیبانینشده در تزریق نویز مراجعه کنید.
حریم خصوصی و دقت دادهها
توسعه کوئریها روی دادههای سندباکس
بهترین روش : فقط زمانی که در حال تولید هستید، دادههای تولید را جستجو کنید.
در هر زمان که امکان دارد، از دادههای sandbox در طول توسعهی پرسوجوی خود استفاده کنید. کارهایی که از دادههای sandbox استفاده میکنند، فرصتهای بیشتری برای بررسی تفاوتها برای فیلتر کردن نتایج پرسوجوی شما ایجاد نمیکنند. علاوه بر این، به دلیل عدم بررسی حریم خصوصی، پرسوجوهای sandbox سریعتر اجرا میشوند و امکان تکرار سریعتر در طول توسعهی پرسوجو را فراهم میکنند.
اگر مجبورید روی دادههای واقعی خود پرسوجوهایی ایجاد کنید (مانند استفاده از جداول تطبیق)، برای اینکه احتمال همپوشانی ردیفها کمتر شود، محدودههای تاریخ و سایر پارامترهایی را انتخاب کنید که بعید است برای هر تکرار پرسوجوی شما همپوشانی داشته باشند. در نهایت، پرسوجوی خود را روی محدوده دلخواه دادهها اجرا کنید.
نتایج تاریخی را با دقت در نظر بگیرید
بهترین روش : احتمال همپوشانی مجموعه نتایج بین کوئریهای اخیراً اجرا شده را کاهش دهید.
به خاطر داشته باشید که میزان تغییر بین نتایج پرسوجو بر احتمال حذف نتایج در آینده به دلیل بررسیهای حریم خصوصی تأثیر خواهد گذاشت. مجموعه نتایج دوم که شباهت زیادی به مجموعه نتایج اخیراً بازگردانده شده دارد، احتمالاً حذف خواهد شد.
در عوض، پارامترهای کلیدی در پرس و جوی خود، مانند محدوده تاریخ یا شناسه کمپین، را تغییر دهید تا احتمال همپوشانی قابل توجه کاهش یابد.
دادههای امروز را جستجو نکنید
بهترین روش : چندین کوئری را که تاریخ پایان آنها امروز است، اجرا نکنید.
اجرای چندین پرسوجو با تاریخ پایان برابر با امروز اغلب منجر به فیلتر شدن ردیفها میشود. این راهنما همچنین در مورد اجرای پرسوجوها کمی پس از نیمهشب روی دادههای دیروز صدق میکند.
بیش از حد لازم، دادههای مشابه را جستجو نکنید
بهترین شیوهها :
- تاریخهای شروع و پایان کاملاً مقید را انتخاب کنید.
- به جای پرسوجو از پنجرههای همپوشانی، پرسوجوهای خود را روی مجموعههای مجزا از دادهها اجرا کنید، سپس نتایج را در BigQuery تجمیع کنید.
- به جای اجرای مجدد پرس و جو، از نتایج ذخیره شده استفاده کنید.
- برای هر محدوده تاریخی که در مورد آن پرس و جو میکنید، جداول موقت ایجاد کنید.
مرکز دادههای تبلیغات، تعداد کل دفعاتی که میتوانید دادههای یکسانی را جستجو کنید، محدود میکند. به همین دلیل، باید سعی کنید تعداد دفعاتی که به یک قطعه داده مشخص دسترسی پیدا میکنید را محدود کنید.
در یک پرسوجو، از تجمیعهای بیشتر از حد لازم استفاده نکنید.
بهترین شیوهها:
- تعداد تجمیعها را در یک پرسوجو به حداقل برسانید
- در صورت امکان، کوئریها را برای ترکیب تجمیعها بازنویسی کنید
مرکز دادههای تبلیغات، تعداد تجمیعهای بین کاربران مجاز برای استفاده در یک زیرپرسوجو را به ۱۰۰ عدد محدود میکند. از این رو، به طور کلی توصیه میکنیم پرسوجوهایی بنویسید که ردیفهای بیشتری با کلیدهای گروهبندی متمرکز و تجمیعهای ساده تولید کنند، نه ستونهای بیشتر با کلیدهای گروهبندی گسترده و تجمیعهای پیچیده. از الگوی زیر باید اجتناب شود:
SELECT
COUNTIF(field_1 = a_1 AND field_2 = b_1) AS cnt_1,
COUNTIF(field_1 = a_2 AND field_2 = b_2) AS cnt_2
FROM
table
پرسوجوهایی که رویدادها را بسته به همان مجموعه فیلدها شمارش میکنند، باید با استفاده از دستور GROUP BY بازنویسی شوند.
SELECT
field_1,
field_2,
COUNT(1) AS cnt
FROM
table
GROUP BY
1, 2
نتیجه را میتوان به همان روش در BigQuery جمع کرد.
پرسوجوهایی که ستونهایی را از یک آرایه ایجاد میکنند و سپس آنها را با هم جمع میکنند، باید برای ادغام این مراحل بازنویسی شوند.
SELECT
COUNTIF(a_1) AS cnt_1,
COUNTIF(a_2) AS cnt_2
FROM
(SELECT
1 IN UNNEST(field) AS a_1,
2 IN UNNEST(field) AS a_2,
FROM
table)
پرسوجوی قبلی را میتوان به صورت زیر بازنویسی کرد:
SELECT f, COUNT(1) FROM table, UNNEST(field) AS f GROUP BY 1
پرسوجوهایی که از ترکیبهای مختلفی از فیلدها در تجمیعهای مختلف استفاده میکنند، میتوانند به چندین پرسوجوی متمرکزتر بازنویسی شوند.
SELECT
COUNTIF(field_1 = a_1) AS cnt_a_1,
COUNTIF(field_1 = b_1) AS cnt_b_1,
COUNTIF(field_2 = a_2) AS cnt_a_2,
COUNTIF(field_2 = b_2) AS cnt_b_2,
FROM table
پرس و جوی قبلی را میتوان به موارد زیر تقسیم کرد:
SELECT
field_1, COUNT(*) AS cnt
FROM table
GROUP BY 1
و
SELECT
field_2, COUNT(*) AS cnt
FROM table
GROUP BY 1
شما میتوانید این نتایج را به پرسوجوهای جداگانه تقسیم کنید، جداول را در یک پرسوجوی واحد ایجاد و به هم متصل کنید، یا در صورت سازگاری طرحوارهها، آنها را با یک UNION ترکیب کنید.
بهینهسازی و درک اتصالات
بهترین روش : برای اتصال کلیکها یا تبدیلها به نمایشها، از LEFT JOIN به جای INNER JOIN استفاده کنید.
همه نمایشها با کلیک یا تبدیل مرتبط نیستند. بنابراین، اگر کلیکها یا تبدیلهای نمایشها را INNER JOIN ، نمایشهایی که به کلیک یا تبدیل مرتبط نیستند از نتایج شما فیلتر میشوند.

به نتایج نهایی در BigQuery بپیوندید
بهترین روش : از کوئریهای Ads Data Hub که نتایج تجمیعشده را به هم متصل میکنند، اجتناب کنید. در عوض، دو کوئری جداگانه بنویسید و نتایج را در BigQuery به هم متصل کنید.
ردیفهایی که الزامات تجمیع را برآورده نمیکنند، از نتایج شما فیلتر میشوند. بنابراین، اگر پرسوجوی شما یک ردیف به اندازه کافی تجمیع نشده را با یک ردیف به اندازه کافی تجمیع شده پیوند دهد، ردیف حاصل فیلتر خواهد شد. علاوه بر این، پرسوجوهایی که چندین تجمیع دارند، در Ads Data Hub عملکرد کمتری دارند.
شما میتوانید نتایج (در BigQuery) از چندین پرسوجوی تجمیعی (از Ads Data Hub) را به هم متصل کنید . نتایج محاسبهشده با استفاده از پرسوجوهای رایج، طرحوارههای نهایی را به اشتراک میگذارند.
کوئری زیر نتایج تک تک Ads Data Hub ( campaign_data_123 و campaign_data_456 ) را دریافت کرده و آنها را در BigQuery به هم متصل میکند:
SELECT t1.campaign_id, t1.city, t1.X, t2.Y
FROM `campaign_data_123` AS t1
FULL JOIN `campaign_data_456` AS t2
USING (campaign_id, city)
از خلاصههای ردیف فیلتر شده استفاده کنید
بهترین روش : خلاصههای ردیف فیلتر شده را به کوئریهای خود اضافه کنید.
خلاصه ردیفهای فیلتر شده، دادههایی را که به دلیل بررسیهای حریم خصوصی فیلتر شدهاند، جمع میکند. دادههای ردیفهای فیلتر شده جمع شده و به یک ردیف جامع اضافه میشوند. در حالی که دادههای فیلتر شده را نمیتوان بیشتر تجزیه و تحلیل کرد، خلاصهای از میزان دادههای فیلتر شده از نتایج ارائه میدهد.
حساب کاربری برای شناسههای کاربری صفر شده
بهترین روش : شناسههای کاربری صفر را در نتایج خود لحاظ کنید.
شناسه کاربر نهایی ممکن است به دلایل مختلفی روی ۰ تنظیم شود، از جمله: انصراف از شخصیسازی تبلیغات ، دلایل نظارتی و غیره. به این ترتیب، دادههایی که از چندین کاربر سرچشمه میگیرند، با user_id برابر با ۰ تنظیم میشوند.
اگر میخواهید مجموع دادهها، مانند کل نمایشها یا کلیکها را درک کنید، باید این رویدادها را نیز لحاظ کنید. با این حال، این دادهها برای استخراج بینش در مورد مشتریان مفید نخواهند بود و اگر چنین تحلیلی انجام میدهید، باید فیلتر شوند.
شما میتوانید با اضافه کردن WHERE user_id != "0" به کوئریهای خود، این دادهها را از نتایج خود حذف کنید.
عملکرد
از تجمیع مجدد اجتناب کنید
بهترین روش : از تجمیع چندین لایه بین کاربران خودداری کنید.
پرسوجوهایی که نتایجی را که قبلاً تجمیع شدهاند، مانند پرسوجویی با چندین GROUP BY یا تجمیع تودرتو، ترکیب میکنند، به منابع بیشتری برای پردازش نیاز دارند.
اغلب، کوئریهایی که چندین لایه تجمیع دارند، میتوانند شکسته شوند و عملکرد را بهبود بخشند. شما باید سعی کنید ردیفها را در سطح رویداد یا کاربر هنگام پردازش نگه دارید و سپس با یک تجمیع واحد ترکیب کنید.
از الگوهای زیر باید اجتناب شود:
SELECT SUM(count)
FROM
(SELECT campaign_id, COUNT(0) AS count FROM ... GROUP BY 1)
پرسوجوهایی که از چندین لایه تجمیع استفاده میکنند، باید برای استفاده از یک لایه تجمیع بازنویسی شوند.
(SELECT ... GROUP BY ... )
JOIN USING (...)
(SELECT ... GROUP BY ... )
کوئریهایی که به راحتی قابل تجزیه هستند، باید تجزیه شوند. میتوانید نتایج را در BigQuery به هم متصل کنید.
بهینه سازی برای BigQuery
به طور کلی، کوئریهایی که کمتر انجام میدهند، عملکرد بهتری دارند. هنگام ارزیابی عملکرد کوئری، میزان کار مورد نیاز به عوامل زیر بستگی دارد:
- دادههای ورودی و منابع داده (I/O) : کوئری شما چند بایت را میخواند؟
- ارتباط بین گرهها (ترکیب) : چند بایت از درخواست شما به مرحله بعدی منتقل میشود؟
- محاسبات : پرس و جوی شما به چه میزان کار CPU نیاز دارد؟
- خروجیها (تحقق) : کوئری شما چند بایت مینویسد؟
- ضد الگوهای پرسوجو : آیا پرسوجوهای شما از بهترین شیوههای SQL پیروی میکنند؟
اگر اجرای پرسوجو با توافقنامههای سطح خدمات شما مطابقت ندارد، یا به دلیل اتمام منابع یا اتمام زمان با خطاهایی مواجه میشوید، موارد زیر را در نظر بگیرید:
- استفاده از نتایج پرسوجوهای قبلی به جای محاسبه مجدد. برای مثال، مجموع هفتگی شما میتواند مجموع محاسبهشده در BigQuery از ۷ پرسوجوی تجمیعی یک روزه باشد.
- تجزیه کوئریها به زیرکوئریهای منطقی (مانند تقسیم چندین پیوند به چندین کوئری) یا محدود کردن مجموعه دادههای در حال پردازش. میتوانید نتایج حاصل از کارهای جداگانه را در یک مجموعه داده واحد در BigQuery ترکیب کنید. اگرچه این ممکن است به رفع مشکل فرسودگی منابع کمک کند، اما ممکن است کوئری شما را کند کند.
- اگر در BigQuery با خطای «منابع بیش از حد» مواجه شدید، سعی کنید از جداول موقت برای تقسیم درخواست خود به چندین درخواست BigQuery استفاده کنید.
- ارجاع به جداول کمتر در یک پرسوجو، زیرا این کار از حجم زیادی از حافظه استفاده میکند و میتواند باعث عدم موفقیت پرسوجوی شما شود.
- کوئریهای خود را طوری بازنویسی کنید که به جداول کاربری کمتری متصل شوند.
- بازنویسی کوئریهایتان برای جلوگیری از اتصال مجدد همان جدول به خودش.
مشاور استعلام
اگر SQL شما معتبر باشد اما ممکن است باعث فیلترینگ بیش از حد شود، مشاور پرسوجو در طول فرآیند توسعه پرسوجو، توصیههای عملی ارائه میدهد تا به شما در جلوگیری از نتایج نامطلوب کمک کند.
محرکها شامل الگوهای زیر هستند:
- اتصال زیر کوئریهای تجمیعشده
- اتصال دادههای تجمیعنشده با کاربران بالقوه متفاوت
- جداول موقت تعریف شده به صورت بازگشتی
برای استفاده از مشاور استعلام:
- رابط کاربری . توصیهها در ویرایشگر پرسوجو، بالای متن پرسوجو نمایش داده میشوند.
- API . از متد
customers.analysisQueries.validateاستفاده کنید.