რამოდენიმე პარტიშენთან მუშაობა
წინა ორ პოსტში ვისაუბრეთ პარტიშენების შექმნასა და არსებულის გაყოფაზე. ეხლა მინდა შევეხო მის გამოყენებას 2 ან მეტი პარტიშენის შემთხვევაში. მაშინ როდესაც მონაცემს ვიღებთ მხოლოდ ერთი რომელიმე პარტიშენიდან SQL გამოიყურება ასე (გამოვიყენებს წინა პოსტების მაგალითებს)-
1 | SELECT * FROM myTable partition (p200712) |
ეს ჩვენ გვიბრუნებს რეზულტატს მხოლოდ ერთი მითითებული პარტიშენიდან, მაგრამ როცა დამჭირდა რამოდენიმე პარტიშენებიდან ერთდოულად ამოღება მონაცემების აღმოჩნდა რომ ისეთი სინტაქსი რომელიც მოხერხებული და ლოგიკური იქნებოდა არასწორი იყო და სამწუხაროდ ასეთი მიმართვა არ არსებობს იხ. მაგ –
1 | SELECT * FROM test_table partitions (p200710,p200711,p200712) |
რადგან ეს სელექტი სინტაქსის შეცდომას გვიბრუნებს პირველი რაც მახსენდება არის
1 2 3 | SELECT * FROM test_table partitions (p200710) UNION ALL SELECT * FROM test_table partitions (p200711) |
შედეგი გვაქვს დადებითი.
მიკითხვ-მოკითხვის შემდეგ აღმოჩნდა რომ ამისათვის საჭიროა სელექთის დროს პარტიშენები საერთოდ არ ვახსენოთ და ჩვენს მაგალითში ცხრილიდან კონკრეტული ნაწილის ამღება უნდა მოხდეს იმ სვეტების განსაზღვრით რომელითან არის პარტიშენები გაკეთებული.
მაგ –
1 | SELECT * FROM test_table WHERE birthday>'01-oct-2007' AND birthday>'01-dec-2007' |
ვინაიდან test_table -ზე პარტიშენები განსაზღვრულია birthday ველით, ამ კონკრეტული მაგალითის შესრულებისას იგი ავტომატურად მხოლოდ 2 პარტიშენს მიმართავს (p200710,p200711) – ს.
მაგალითი მეორე და მაგალითი მესამე ორივე დამაკმაყოფილებელია თუმცა უპირატესობას ალბათ გავარჩევ როგორც კი მოვიცლი და აქვე დავარედაქტირებ მიმდინარე პოსტს :).