নিম্নলিখিত সর্বোত্তম অনুশীলনগুলি আপনাকে গোপনীয়তা-কেন্দ্রিক এবং পারফরম্যান্ট প্রশ্নগুলি বিকাশ করার কৌশলগুলি সরবরাহ করবে। নয়েজ মোডে কোয়েরি চালানোর জন্য নির্দিষ্ট সর্বোত্তম অনুশীলনের জন্য, নয়েজ ইনজেকশনে সমর্থিত এবং অসমর্থিত ক্যোয়ারী প্যাটার্নের বিভাগগুলি দেখুন।
গোপনীয়তা এবং তথ্য নির্ভুলতা
স্যান্ডবক্স ডেটাতে প্রশ্নগুলি বিকাশ করুন৷
সর্বোত্তম অভ্যাস : আপনি যখন উৎপাদনে থাকবেন তখনই শুধুমাত্র প্রোডাকশন ডেটা জিজ্ঞাসা করুন।
যখনই সম্ভব আপনার ক্যোয়ারী ডেভেলপমেন্টের সময় স্যান্ডবক্স ডেটা ব্যবহার করুন। স্যান্ডবক্স ডেটা ব্যবহার করে চাকরিগুলি আপনার ক্যোয়ারী ফলাফলগুলি ফিল্টার করার জন্য পার্থক্য চেকের জন্য অতিরিক্ত সুযোগ দেয় না। উপরন্তু, গোপনীয়তা চেকের অভাবের কারণে, স্যান্ডবক্স ক্যোয়ারীগুলি দ্রুত চলে, যা ক্যোয়ারী ডেভেলপমেন্টের সময় আরও দ্রুত পুনরাবৃত্তির অনুমতি দেয়।
যদি আপনাকে আপনার প্রকৃত ডেটাতে (যেমন ম্যাচ টেবিল ব্যবহার করার সময়) প্রশ্নগুলি বিকাশ করতে হয়, যাতে আপনি সারিগুলিকে ওভারল্যাপ করার সম্ভাবনা কম করেন, তারিখের ব্যাপ্তি এবং অন্যান্য পরামিতিগুলি বেছে নিন যা আপনার প্রশ্নের প্রতিটি পুনরাবৃত্তির জন্য ওভারল্যাপ হওয়ার সম্ভাবনা কম। অবশেষে, ডেটার পছন্দসই পরিসরে আপনার ক্যোয়ারী চালান।
সাবধানে ঐতিহাসিক ফলাফল বিবেচনা করুন
সর্বোত্তম অনুশীলন : সম্প্রতি চালানো প্রশ্নের মধ্যে ফলাফল সেট ওভারল্যাপের সম্ভাবনা হ্রাস করুন।
মনে রাখবেন যে ক্যোয়ারী ফলাফলের মধ্যে পরিবর্তনের হার গোপনীয়তা চেকের কারণে পরবর্তীতে ফলাফলগুলি বাদ দেওয়া কতটা সম্ভাবনার উপর প্রভাব ফেলবে৷ একটি দ্বিতীয় ফলাফল সেট যা সম্প্রতি ফিরে আসা ফলাফলের সেটের সাথে সাদৃশ্যপূর্ণ।
পরিবর্তে, উল্লেখযোগ্য ওভারল্যাপের সম্ভাবনা কমাতে আপনার ক্যোয়ারীতে কী প্যারামিটারগুলি পরিবর্তন করুন, যেমন তারিখের ব্যাপ্তি বা প্রচারাভিযান আইডি।
আজকের ডেটা জিজ্ঞাসা করবেন না
সর্বোত্তম অনুশীলন : আজ যেখানে শেষ তারিখ সেখানে একাধিক প্রশ্ন চালাবেন না।
আজকের সমান সমাপ্তির তারিখ সহ একাধিক প্রশ্ন চালানোর ফলে প্রায়শই সারিগুলি ফিল্টার হয়ে যায়। এই নির্দেশিকাটি গতকালের ডেটাতে মধ্যরাতের পরপরই চালানো প্রশ্নের ক্ষেত্রেও প্রযোজ্য।
একই ডেটা প্রয়োজনের চেয়ে বেশি জিজ্ঞাসা করবেন না
সর্বোত্তম অনুশীলন :
- দৃঢ়ভাবে আবদ্ধ শুরু এবং শেষ তারিখ নির্বাচন করুন.
- ওভারল্যাপিং উইন্ডোতে অনুসন্ধান করার পরিবর্তে, ডেটার বিচ্ছিন্ন সেটগুলিতে আপনার প্রশ্নগুলি চালান, তারপর BigQuery-এ ফলাফলগুলিকে একত্রিত করুন৷
- আপনার ক্যোয়ারী পুনরায় চালানোর পরিবর্তে সংরক্ষিত ফলাফল ব্যবহার করুন।
- আপনি যে প্রতিটি তারিখের সীমার উপর প্রশ্ন করছেন তার জন্য টেম্প টেবিল তৈরি করুন।
বিজ্ঞাপন ডেটা হাব আপনি একই ডেটা অনুসন্ধান করতে পারেন এমন মোট সংখ্যা সীমাবদ্ধ করে। যেমন, আপনার প্রদত্ত ডেটার একটি অংশ অ্যাক্সেস করার সংখ্যা সীমিত করার চেষ্টা করা উচিত।
একই ক্যোয়ারীতে প্রয়োজনের চেয়ে বেশি সমষ্টি ব্যবহার করবেন না
সর্বোত্তম অনুশীলন:
- একটি ক্যোয়ারীতে সমষ্টির সংখ্যা কমিয়ে দিন
- যখন সম্ভব তখন সমষ্টি একত্রিত করতে প্রশ্নগুলি পুনরায় লিখুন
বিজ্ঞাপন ডেটা হাব একটি সাবকোয়েরিতে ব্যবহার করার জন্য অনুমোদিত ক্রস-ইউজার অ্যাগ্রিগেশনের সংখ্যা 100-এ সীমাবদ্ধ করে। তাই, সামগ্রিকভাবে আমরা কোয়েরি লেখার পরামর্শ দিই যেগুলি বিস্তৃত গ্রুপিং কী এবং জটিল কী সহ আরও কলামের পরিবর্তে ফোকাসড গ্রুপিং কী এবং সাধারণ সমষ্টি সহ আরও সারি আউটপুট করে। সমষ্টি নিম্নলিখিত প্যাটার্ন এড়ানো উচিত:
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 এর সাথে একত্রিত করতে পারেন৷
অপ্টিমাইজ করুন এবং যোগদান বুঝতে
সর্বোত্তম অনুশীলন : ক্লিক বা ইম্প্রেশনে রূপান্তর করতে একটি INNER JOIN
পরিবর্তে একটি LEFT JOIN
ব্যবহার করুন৷
সমস্ত ইম্প্রেশন ক্লিক বা রূপান্তরের সাথে সম্পর্কিত নয়। তাই, যদি আপনি INNER JOIN
ক্লিক বা ইমপ্রেশনে রূপান্তর করেন, তাহলে যে ইমপ্রেশনগুলি ক্লিক বা রূপান্তরগুলির সাথে আবদ্ধ নয় সেগুলি আপনার ফলাফল থেকে ফিল্টার করা হবে৷
BigQuery-এ কিছু চূড়ান্ত ফলাফলে যোগ দিন
সর্বোত্তম অনুশীলন : বিজ্ঞাপন ডেটা হাব প্রশ্নগুলি এড়িয়ে চলুন যা সমষ্টিগত ফলাফলে যোগ দেয়। পরিবর্তে, ২টি পৃথক প্রশ্ন লিখুন এবং BigQuery-এ ফলাফলে যোগ দিন।
যে সারিগুলি একত্রিতকরণের প্রয়োজনীয়তা পূরণ করে না সেগুলি আপনার ফলাফল থেকে ফিল্টার করা হয়৷ অতএব, যদি আপনার ক্যোয়ারী একটি পর্যাপ্ত সমষ্টিযুক্ত সারির সাথে একটি অপর্যাপ্তভাবে একত্রিত সারিতে যোগ দেয়, তাহলে ফলাফল সারিটি ফিল্টার করা হবে। উপরন্তু, একাধিক একত্রিত প্রশ্ন বিজ্ঞাপন ডেটা হাবে কম পারফরম্যান্স করে।
আপনি একাধিক একত্রিত প্রশ্ন (Ads Data Hub থেকে) থেকে ফলাফলে (BigQuery-এ) যোগ দিতে পারেন। সাধারণ প্রশ্ন ব্যবহার করে গণনা করা ফলাফল চূড়ান্ত স্কিমা ভাগ করবে।
নিম্নলিখিত ক্যোয়ারীটি পৃথক বিজ্ঞাপন ডেটা হাবের ফলাফল ( 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)
ফিল্টার করা সারি সারাংশ ব্যবহার করুন
সর্বোত্তম অনুশীলন : আপনার প্রশ্নগুলিতে ফিল্টার করা সারি সারাংশ যোগ করুন।
ফিল্টার করা সারি সারাংশের ট্যালি ডেটা যা গোপনীয়তা চেকের কারণে ফিল্টার করা হয়েছিল। ফিল্টার করা সারি থেকে ডেটা যোগ করা হয় এবং একটি ক্যাচ-অল সারিতে যোগ করা হয়। যদিও ফিল্টার করা ডেটা আরও বিশ্লেষণ করা যায় না, এটি ফলাফল থেকে কত ডেটা ফিল্টার করা হয়েছিল তার একটি সারাংশ প্রদান করে।
শূন্য ব্যবহারকারী আইডিগুলির জন্য অ্যাকাউন্ট
সর্বোত্তম অনুশীলন : আপনার ফলাফলে শূন্য ব্যবহারকারী আইডিগুলির জন্য অ্যাকাউন্ট।
একটি শেষ-ব্যবহারকারীর আইডি 0-তে সেট করা হতে পারে অনেক কারণে, যার মধ্যে রয়েছে: বিজ্ঞাপন ব্যক্তিগতকরণ থেকে অপ্ট আউট করা , নিয়ন্ত্রক কারণ ইত্যাদি। যেমন, একাধিক ব্যবহারকারীর থেকে উদ্ভূত ডেটা 0-এর user_id
এ কী করা হবে।
আপনি যদি মোট ইম্প্রেশন বা ক্লিকের মতো ডেটা টোটাল বুঝতে চান, তাহলে আপনাকে এই ইভেন্টগুলি অন্তর্ভুক্ত করতে হবে। যাইহোক, এই ডেটা গ্রাহকদের অন্তর্দৃষ্টি প্রাপ্ত করার জন্য উপযোগী হবে না, এবং আপনি যদি এই ধরনের বিশ্লেষণ করছেন তাহলে ফিল্টার করা উচিত।
আপনি আপনার প্রশ্নের সাথে WHERE user_id != "0"
যোগ করে আপনার ফলাফল থেকে এই ডেটা বাদ দিতে পারেন৷
কর্মক্ষমতা
পুনরায় একত্রিত হওয়া এড়িয়ে চলুন
সর্বোত্তম অনুশীলন : ব্যবহারকারীদের মধ্যে একত্রিতকরণের একাধিক স্তর এড়িয়ে চলুন।
যে ক্যোয়ারীগুলি ইতিমধ্যেই একত্রিত করা ফলাফলগুলিকে একত্রিত করে, যেমন একাধিক GROUP BY
s বা নেস্টেড অ্যাগ্রিগেশন সহ একটি প্রশ্নের ক্ষেত্রে, প্রক্রিয়া করার জন্য আরও সংস্থান প্রয়োজন৷
প্রায়শই, একত্রিতকরণের একাধিক স্তর সহ প্রশ্নগুলিকে ভেঙে দেওয়া যেতে পারে, কর্মক্ষমতা উন্নত করে। প্রক্রিয়া করার সময় আপনার ইভেন্ট বা ব্যবহারকারীর স্তরে সারি রাখার চেষ্টা করা উচিত এবং তারপরে একটি একত্রিতকরণের সাথে একত্রিত করা উচিত।
নিম্নলিখিত নিদর্শন এড়ানো উচিত:
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 কাজ করতে হবে?
- আউটপুট (বস্তুকরণ) : আপনার ক্যোয়ারী কত বাইট লিখবে?
- অ্যান্টি-প্যাটার্নস জিজ্ঞাসা করুন : আপনার প্রশ্নগুলি কি এসকিউএল সেরা অনুশীলনগুলি অনুসরণ করছে?
যদি ক্যোয়ারী এক্সিকিউশন আপনার পরিষেবা স্তরের চুক্তিগুলি পূরণ না করে, বা আপনি সম্পদের ক্লান্তি বা সময়সীমার কারণে ত্রুটির সম্মুখীন হন, বিবেচনা করুন:
- পুনঃকম্পিউটিংয়ের পরিবর্তে পূর্ববর্তী প্রশ্নের ফলাফলগুলি ব্যবহার করা। উদাহরণস্বরূপ, আপনার সাপ্তাহিক মোট 7টি একক দিনের সমষ্টিগত প্রশ্নের BigQuery-এ গণনা করা যোগফল হতে পারে।
- যৌক্তিক সাবকোয়েরিতে কোয়েরিগুলিকে বিভক্ত করা (যেমন একাধিক কোয়েরিতে একাধিক যোগদানকে বিভক্ত করা), বা অন্যথায় প্রক্রিয়া করা ডেটার সেটকে সীমাবদ্ধ করা। আপনি BigQuery-এ একটি একক ডেটাসেটে পৃথক চাকরির ফলাফল একত্রিত করতে পারেন। যদিও এটি সম্পদ নিঃশেষে সাহায্য করতে পারে, তবে এটি আপনার প্রশ্নের গতি কমিয়ে দিতে পারে।
- আপনি যদি BigQuery-এ রিসোর্স অতিক্রম করে থাকেন, তাহলে আপনার ক্যোয়ারীটিকে একাধিক BigQuery কোয়েরিতে বিভক্ত করতে টেম্প টেবিল ব্যবহার করে দেখুন।
- একটি একক ক্যোয়ারীতে কম টেবিল উল্লেখ করা, কারণ এটি প্রচুর পরিমাণে মেমরি ব্যবহার করে এবং আপনার ক্যোয়ারী ব্যর্থ হতে পারে।
- আপনার প্রশ্নগুলিকে পুনঃলিখন করা হচ্ছে যাতে তারা কম ব্যবহারকারী টেবিলে যোগদান করে।
- একই টেবিলে যোগদান করা এড়াতে আপনার প্রশ্নগুলি পুনরায় লেখা হচ্ছে।
প্রশ্ন উপদেষ্টা
যদি আপনার SQL বৈধ হয় কিন্তু অত্যধিক ফিল্টারিং ট্রিগার করতে পারে, ক্যোয়ারী ডেভেলপমেন্ট প্রক্রিয়া চলাকালীন ক্যোয়ারী উপদেষ্টা আপনাকে অনাকাঙ্ক্ষিত ফলাফল এড়াতে সাহায্য করার জন্য কার্যকরী পরামর্শ প্রদান করে।
ট্রিগার নিম্নলিখিত নিদর্শন অন্তর্ভুক্ত:
- একত্রিত সাবকোয়েরিতে যোগদান
- সম্ভাব্য ভিন্ন ব্যবহারকারীদের সাথে একত্রিত ডেটা যোগ করা
- পুনরাবৃত্তভাবে সংজ্ঞায়িত টেম্প টেবিল
ক্যোয়ারী উপদেষ্টা ব্যবহার করতে:
- UI সুপারিশগুলি ক্যোয়ারী পাঠ্যের উপরে, ক্যোয়ারী সম্পাদকে প্রদর্শিত হবে।
- এপিআই
customers.analysisQueries.validate
পদ্ধতি ব্যবহার করুন।