নিম্নলিখিত সেরা অনুশীলনগুলি আপনাকে গোপনীয়তা-কেন্দ্রিক এবং পারফর্ম্যান্ট কোয়েরি তৈরির কৌশল প্রদান করবে। নয়েজ মোডে কোয়েরি চালানোর জন্য নির্দিষ্ট সেরা অনুশীলনগুলির জন্য, নয়েজ ইনজেকশনে সমর্থিত এবং অসমর্থিত কোয়েরি প্যাটার্নের বিভাগগুলি দেখুন।
গোপনীয়তা এবং তথ্যের নির্ভুলতা
স্যান্ডবক্স ডেটার উপর প্রশ্ন তৈরি করুন
সর্বোত্তম অনুশীলন : যখন আপনি উৎপাদনে থাকবেন তখনই শুধুমাত্র উৎপাদন ডেটা অনুসন্ধান করুন।
যখনই সম্ভব আপনার কোয়েরি ডেভেলপমেন্টের সময় স্যান্ডবক্স ডেটা ব্যবহার করুন। স্যান্ডবক্স ডেটা ব্যবহার করে এমন কাজগুলি আপনার কোয়েরি ফলাফল ফিল্টার করার জন্য পার্থক্য পরীক্ষা করার জন্য অতিরিক্ত সুযোগ তৈরি করে না। উপরন্তু, গোপনীয়তা পরীক্ষা না থাকার কারণে, স্যান্ডবক্স কোয়েরিগুলি দ্রুত চলে, যা কোয়েরি ডেভেলপমেন্টের সময় আরও দ্রুত পুনরাবৃত্তির সুযোগ করে দেয়।
যদি আপনার প্রকৃত ডেটার উপর কোয়েরি তৈরি করতে হয় (যেমন ম্যাচ টেবিল ব্যবহার করার সময়), তাহলে সারিগুলিকে ওভারল্যাপ করার সম্ভাবনা কমাতে, তারিখের পরিসর এবং অন্যান্য পরামিতিগুলি বেছে নিন যা আপনার কোয়েরির প্রতিটি পুনরাবৃত্তির জন্য ওভারল্যাপ করার সম্ভাবনা কম। অবশেষে, আপনার কোয়েরিটি পছন্দসই ডেটার পরিসরের উপর চালান।
ঐতিহাসিক ফলাফল সাবধানে বিবেচনা করুন
সর্বোত্তম অনুশীলন : সম্প্রতি চালানো কোয়েরির মধ্যে ফলাফল সেট ওভারল্যাপের সম্ভাবনা হ্রাস করুন।
মনে রাখবেন যে কোয়েরি ফলাফলের মধ্যে পরিবর্তনের হার গোপনীয়তা পরীক্ষার কারণে পরবর্তীতে ফলাফল বাদ পড়ার সম্ভাবনার উপর প্রভাব ফেলবে। সম্প্রতি ফিরে আসা ফলাফল সেটের সাথে সাদৃশ্যপূর্ণ দ্বিতীয় ফলাফল সেটটি বাদ দেওয়ার সম্ভাবনা বেশি।
পরিবর্তে, উল্লেখযোগ্য ওভারল্যাপের সম্ভাবনা কমাতে আপনার কোয়েরির মূল প্যারামিটারগুলি, যেমন তারিখের পরিসর বা প্রচারাভিযান আইডি, পরিবর্তন করুন।
আজকের তথ্য জিজ্ঞাসা করবেন না।
সর্বোত্তম অনুশীলন : আজ শেষ তারিখ যেখানে সেখানে একাধিক কোয়েরি চালাবেন না।
আজকের সমান শেষ তারিখ সহ একাধিক কোয়েরি চালানোর ফলে প্রায়শই সারিগুলি ফিল্টার করা হবে। এই নির্দেশিকা গতকালের ডেটার উপর মধ্যরাতের কিছুক্ষণ পরে চলমান কোয়েরির ক্ষেত্রেও প্রযোজ্য।
প্রয়োজনের চেয়ে বেশি একই তথ্য অনুসন্ধান করবেন না।
সেরা অনুশীলন :
- শুরু এবং শেষের তারিখগুলি শক্তভাবে আবদ্ধ করুন।
- ওভারল্যাপিং উইন্ডোতে কোয়েরি করার পরিবর্তে, আপনার কোয়েরিগুলি বিচ্ছিন্ন ডেটা সেটে চালান, তারপর ফলাফলগুলি 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-এর সাথে একত্রিত করতে পারেন।
জয়েনগুলি অপ্টিমাইজ করুন এবং বুঝুন
সর্বোত্তম পদ্ধতি : ক্লিক বা রূপান্তরকে ইম্প্রেশনে যোগ করতে INNER JOIN এর পরিবর্তে LEFT JOIN ব্যবহার করুন।
সব ইম্প্রেশন ক্লিক বা রূপান্তরের সাথে সম্পর্কিত নয়। অতএব, যদি আপনি INNER JOIN ক্লিক বা ইম্প্রেশনের উপর রূপান্তর করেন, তাহলে ক্লিক বা রূপান্তরের সাথে সম্পর্কিত নয় এমন ইম্প্রেশনগুলি আপনার ফলাফল থেকে ফিল্টার করা হবে।

BigQuery-তে কিছু চূড়ান্ত ফলাফলে যোগদান করুন
সর্বোত্তম পদ্ধতি : অ্যাডস ডেটা হাব কোয়েরিগুলি এড়িয়ে চলুন যা সমষ্টিগত ফলাফলগুলিকে যুক্ত করে। পরিবর্তে, 2টি পৃথক কোয়েরি লিখুন এবং 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 সহ একটি কোয়েরির ক্ষেত্রে, অথবা নেস্টেড অ্যাগ্রিগেশন, সেগুলিকে প্রক্রিয়া করার জন্য আরও সংস্থান প্রয়োজন।
প্রায়শই, একাধিক স্তরের সমষ্টি সহ কোয়েরিগুলিকে ভেঙে ফেলা যেতে পারে, যার ফলে কর্মক্ষমতা উন্নত হয়। প্রক্রিয়াকরণের সময় আপনার সারিগুলিকে ইভেন্ট বা ব্যবহারকারী স্তরে রাখার চেষ্টা করা উচিত এবং তারপরে একটি একক সমষ্টির সাথে একত্রিত করা উচিত।
নিম্নলিখিত ধরণগুলি এড়ানো উচিত:
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 বৈধ হয় কিন্তু অতিরিক্ত ফিল্টারিং ট্রিগার করতে পারে, তাহলে কোয়েরি অ্যাডভাইজার কোয়েরি ডেভেলপমেন্ট প্রক্রিয়ার সময় কার্যকর পরামর্শ প্রদান করে, যা আপনাকে অবাঞ্ছিত ফলাফল এড়াতে সাহায্য করবে।
ট্রিগারগুলির মধ্যে নিম্নলিখিত ধরণগুলি অন্তর্ভুক্ত থাকে:
- সমষ্টিগত সাবকোয়েরিতে যোগদান করা
- সম্ভাব্য ভিন্ন ব্যবহারকারীর সাথে অসংগৃহীত ডেটা যোগ করা
- পুনরাবৃত্তভাবে সংজ্ঞায়িত তাপমাত্রা সারণী
কোয়েরি উপদেষ্টা ব্যবহার করতে:
- UI । সুপারিশগুলি কোয়েরি এডিটরে, কোয়েরি টেক্সটের উপরে প্রদর্শিত হবে।
- API ।
customers.analysisQueries.validateপদ্ধতি ব্যবহার করুন।