আমার কাছে একটি ডাটাবেসের কিছু স্ন্যাপশট রয়েছে যা টাইমসারি নয়। উদাহরণ স্বরূপ:
স্ন্যাপশট দিন 1:
+----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+
স্ন্যাপশট দিন 2 (একটি নতুন পোস্ট আজ যুক্ত করা হয়েছে):
+----+----------------+------------+------------+ | ID | Title | Category | Date | +----+----------------+------------+------------+ | 1 | My first post | helloworld | 2015-01-01 | | 2 | My second post | other | 2015-01-02 | +----+----------------+------------+------------+
স্ন্যাপশটের দিন 3 (আজ 2 পোস্ট সরানো হয়েছে):
+----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+
তাই দিনের মধ্যে, টেবিলের একটি সারি স্থির থাকতে পারে এবং নাও থাকতে পারে। এখন, আমাকে এই জাতীয় একটি কোয়েরি ব্যবহার করতে সক্ষম হতে হবে:
SELECT category, COUNT(*) from day1.My_table group by category
এটি এক দিনের এক টেবিলের জন্য। আমরা যদি এক মাসে বিভাগ অনুসারে দৈনিক গড় পোস্টগুলি গণনা করতে চাই তবে আমাদের এমন কিছু করা উচিত:
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*) as cnt
from day1.My_table
group by category
UNION ALL SELECT category, COUNT(*) as cnt
from day2.My_table
group by category
UNION ALL ...
UNION ALL SELECT category, COUNT(*) as cnt
from day30.My_table
group by category
) group by category
আর একটি উদাহরণ, এক মাসে প্রকাশিত পোস্টের সংখ্যা :
SELECT COUNT(distinct id)
from (
SELECT id
from day1.My_table
UNION ALL ...
UNION ALL SELECT id
from day30.My_table
)
মূলত আমাদের একটি ওজন বিবেচনা করা প্রয়োজন। আমাদের যদি ডে 1 থাকে।মাই_সেবিকা এবং দিন 5.মাই_ টেবিল, প্রতিটি পোস্ট যে দিন 1-এ রয়েছে এবং দিন 5-এ নয়, এটিও গণনা করা হবে যেমনটি ছিল দিন 2,3,4 in দিন 1 ও দিন 5 এর প্রতিটি পোস্ট গণনা করা হবে যেন এটি মাসের প্রতিটি দিনেই থাকে (= পরবর্তী স্ন্যাপশট অবধি)।
সুতরাং আমি যদি> = 6 মাস যাওয়ার দিনে প্রতিদিনের পোস্টের গড় সংখ্যা বিবেচনা করতে চাই, যেখানে আমার কেবল 1 টি স্ন্যাপশট রয়েছে, আমি সেই স্ন্যাপশটে 30 এর ওজন নির্ধারণ করব।
সুতরাং, = 6 মাস আগে একটি ব্যাপ্তির জন্য এক মাসে প্রকাশিত গড় পোস্টটি হ'ল:
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*)*30 as cnt
from day1.My_table
group by category --- Note: I'm not considering the range defined from the user in this example.
) group by category;
মন্তব্যে আরও বলা হয়েছে যে, আমার মতো একটি কোয়েরি করা দরকার:
Select category, AVG(*)
from [fromRange-toRange].MyTable;
চূড়ান্ত সমাধানের জন্য, আমি ভবিষ্যত ব্যবহারকারীর (প্রাক্তন বিপণনকারীদের) এই জাতীয় একটি কোয়েরি করার জন্য একটি মেটাল্যাঙ্গুয়েজ বাস্তবায়নের ধারণাটি বিবেচনা করছি।
আপনি কী ভাবেন যে মেটা ভাষা ছাড়াই ড্রিলটিতে এটি সম্পন্ন করার কোনও উপায় আছে? আমি এটি একটি পুনরাবৃত্তাকারী ইউডিএফ ব্যবহার করে করব তবে তারা কোয়েরি ফিরে পাবে না।
প্রতিটি স্ন্যাপশটটি 250 গিগাবাইটের বড় এবং আমি এই ডেটাসেটকে অন্যান্য বাহ্যিক ডেটার সাথে তুলনা করতে সক্ষম হতে চাই (এই ডেটাসেটের স্কিমটি আমি আগে জানি না)।
অ্যাপাচি ড্রিলের জন্য কি কোনও সমাধান উপযুক্ত? নাকি এই সমস্যার আর কোনও সমাধান আছে?
এছাড়াও এই সমস্যা সম্পর্কে কোনও মেটা-ভাষা বা কাগজ প্রশংসা করা হয়।
সম্পাদনা: আমাদের কাছে লেনদেনের ডেটা নেই। আমাদের কাছে এমন ডেটা রয়েছে যা সময়ের সাথে পরিবর্তিত হয় এবং যুক্ত করা বা অপসারণ করা যায়; এই কারণে আমাদের প্রতিদিনের স্ন্যাপশটগুলির প্রয়োজন। এছাড়াও যে প্রশ্নগুলি সম্পাদন করা হবে তা আমরা আগেই জানি না, তাই কী ধরনের সমষ্টি হবে তা আমরা জানতে পারি না। এছাড়াও প্রতিটি সারিতে প্রায় 100 টি কলাম রয়েছে এবং স্ন্যাপশট প্রতি 250 গিগাবাইট (মাইকিউএল টেবিল) রয়েছে। আমাদের প্রতিটি সম্ভাব্য দিনে প্রতিটি সারিতে এই ডেটাতে পূর্ণ-পাঠ্য অনুসন্ধান প্রয়োজন।
অনুসন্ধানের উদাহরণ হতে পারে "সামোপটিক সম্পর্কে কতগুলি পোস্ট ছিল?" সুতরাং এটি সামটোপিক কীওয়ার্ডের জন্য সমস্ত পোস্ট সন্ধান করতে হবে। প্রতিটি স্ন্যাপশটে একই সারি থাকতে পারে বা নাও থাকতে পারে। এছাড়াও দুটি স্ন্যাপশটের একই পোস্ট থাকতে পারে তবে কিছুটা সংশোধন করা হয়েছে।
table definitions/structures