Metabase

آیا هنوز گیر کرده‌اید؟

چه کاری انجام دهید وقتی پرس‌وجوی شما داده‌هایی که اشتباه به نظر می‌رسند برمی‌گرداند.

عیب‌یابی منطق پرس‌وجوی SQL

چه کاری انجام دهید وقتی پرس‌وجوی شما داده‌هایی که اشتباه به نظر می‌رسند برمی‌گرداند.

ترکیب داده می‌تواند خیلی سریع پیچیده شود (احتمالاً به همین دلیل است که صبورانه SQL می‌نویسید به جای استفاده از query builder دوستانه). این راهنمای عیب‌یابی توضیح می‌دهد چه کاری می‌توانید انجام دهید وقتی پرس‌وجوی شما نتایج غیرمنتظره برمی‌گرداند.

مراحل عیب‌یابی

  1. Schemaها را برای منابع داده استفاده شده در پرس‌وجوی خود دریافت کنید.
  • آیا بیش از یک کلید خارجی ممکن وجود دارد؟
  • آیا کلیدهای خارجی تغییر نام داده‌اند یا به schema دیگری منتقل شده‌اند؟
  • اگر مطمئن نیستید، از شخصی که schema را نگهداری می‌کند بپرسید.
  1. کلیدهای خارجی جداول یا پرس‌وجوهای تودرتو خود را مرور کنید.
  2. برای مشکلات رایج منطق SQL بررسی کنید.

دلایل رایج برای نتایج پرس‌وجوی غیرمنتظره

منطق SQL نحوه ترکیب داده از جداول یا منابع داده مختلف (شامل جداول موقت، مثل نتایج پرس‌وجوهای دیگر) را توصیف می‌کند. رایج‌ترین راه‌های ترکیب داده joinها و پرس‌وجوهای تودرتو هستند.

حتی اگر منطق SQL شما قبلاً کار می‌کرد، می‌تواند زمانی که:

  • جداول یا منابع داده تغییر کرده‌اند.
  • پرس‌وجوهای تودرتو تغییر کرده‌اند (اگر بر اساس یک سؤال ذخیره شده یا مدل می‌سازید).
  • پرس‌وجوهای تودرتو شما همانطور که انتظار دارید محاسبه نمی‌شوند (اگر آن‌ها را از ابتدا نوشته‌اید).
  • داده شما شامل موارد لبه، مثل مقادیر خالی یا NULL است.

خراب شود.

بیشتر اوقات، این تغییرات به صورت upstream توسط سیستم‌هایی که داده شما را جمع‌آوری می‌کنند، یا افرادی که پایگاه‌های داده و ابزارهای BI شما را مدیریت می‌کنند معرفی می‌شوند.

برای تیم‌ها پیش‌بینی اثرات موجی از چنین تغییراتی بسیار دشوار است. رفع منطق SQL نه تنها درباره پاسخ به تغییر است، بلکه به‌روزرسانی رویکرد شما برای محافظت بهتر در برابر به‌روزرسانی‌های آینده است.

اگر یک پیام خطای قرمز دریافت می‌کنید که به بندهای SQL یا نام جدول و ستون اشاره می‌کند، به احتمال زیاد مشکل نحو SQL دارید. به جای آن به عیب‌یابی نحو SQL بروید.

مشکلات رایج منطق SQL

نتایج تجمیع شده (شمارش‌ها، مجموع‌ها و غیره) اشتباه هستند

  1. اگر تجمیع‌های شما:
  • چگونه ردیف‌های خالی یا NULL را در تجمیع‌های خود مدیریت می‌کنید؟
  • چگونه رکوردهای نامعتبر، لغو شده یا منقضی شده را مدیریت می‌کنید؟ از مدیر متابیس یا تیم داده خود درباره منطق تجاری که ممکن است از آن اطلاع نداشته باشید بپرسید.
  1. جداول یا پرس‌وجوهای منبع خود را برای فیلترها بررسی کنید.
  • به عنوان مثال، اعمال SUM روی COUNT_DISTINCT ممکن است مقادیر منحصر به فرد را دو بار بشمارد.
  1. اگر با COUNT_DISTINCT کار می‌کنید، بررسی کنید که آیا با توابع تجمیع دیگر تعامل دارد.
  2. اگر با داده سری زمانی کار می‌کنید، منطقه زمانی خود را بررسی کنید.
  3. اگر داده شما طبق برنامه به‌روز می‌شود، از مدیر متابیس خود بپرسید آیا جداول شما به‌روز هستند.

توضیح

تجمیع‌ها اغلب اولین جایی هستند که یک مشکل ناشی از یکی از دلایل رایج برای نتایج پرس‌وجوی غیرمنتظره را تشخیص می‌دهید. مراحل بالا به شما کمک می‌کند هر مورد لبه داده که ممکن است نتایج شما را کج کند را بگیرید. اگر موارد لبه زیادی پیدا کردید، و انتظار دارید همان موارد را بارها و بارها مدیریت کنید، ممکن است بخواهید همه آن منطق را در یک مدل بسته‌بندی کنید تا به راحتی قابل استفاده مجدد باشد.

گاهی اوقات، ممکن است فقط به یک جفت چشم تازه نیاز داشته باشید. اگر نمی‌توانید علت اصلی را با استفاده از مراحل بالا پیدا کنید، از یک هم‌تیمی بخواهید به شما کمک کند ریاضیات خود را بررسی کنید!

مطالعه بیشتر

نحوه شناسایی یک پرس‌وجوی تودرتو

اگر SQL شما شامل:

  • بیش از یک عبارت SELECT است، از زیرپرس‌وجوها استفاده می‌کنید.
  • یک بند WITH است، از CTEها (عبارات جدول مشترک) استفاده می‌کنید.
  • نمادی که شبیه {{ variable }} در بند FROM یا WITH شما به نظر می‌رسد است، یک متغیر SQL دارید که به یک سؤال ذخیره شده یا مدل ارجاع می‌دهد.

نحوه دریافت schema برای یک پرس‌وجوی تودرتو

  • برای زیرپرس‌وجوها یا CTEها، هر بلوک SELECT را به طور جداگانه اجرا کنید و از بند LIMIT استفاده کنید.
  • برای سؤال‌های ذخیره شده یا مدل‌ها، به سؤال متابیس زیرین از پنل متغیرها یا با چسباندن شماره ID در نوار جستجو بروید. با استفاده از query builder یک محدودیت ردیف اضافه کنید، یا یک بند LIMIT در ویرایشگر SQL اضافه کنید.
  1. نمونه‌ای از داده از پرس‌وجوی تودرتو خود دریافت کنید.
  • در پایگاه داده نمونه متابیس، جدول Products یک ستون ID دارد، و جدول Orders یک ستون Product ID دارد.
  • ID و Product ID هر دو شامل مقادیر عدد صحیح هستند، و بسیاری از آن مقادیر در هر دو ستون ظاهر می‌شوند.
  1. نام ستون‌ها و مقادیر را بین نمونه‌های خود مقایسه کنید تا کلیدهای خارجی را بررسی کنید. به عنوان مثال:
  • جدول Products مقادیر منحصر به فرد در ستون ID دارد.
  • جدول Orders چندین ردیف با همان Product ID دارد.
  • رابطه جدول از Products به Orders یک به چند است (فرض می‌کنیم که رابطه کلید خارجی معتبر است).
  1. ردیف‌ها را بین نمونه‌های خود مقایسه کنید تا رابطه‌های جدول را بررسی کنید. به عنوان مثال:
  2. اگر از یک مدل استفاده می‌کنید، می‌توانید با hover کردن روی نام ستون به دنبال متادیتای به صراحت تعریف شده بگردید.
  3. اگر بر اساس کار شخص دیگری می‌سازید، از سازنده اصلی پرس‌وجو، سؤال ذخیره شده، یا مدل بپرسید.

توضیح

یک schema ستون‌ها در یک جدول، انواع داده آن ستون‌ها، و روابط بین ستون‌ها در جداول مختلف را توصیف می‌کند. این متادیتا معمولاً به صراحت برای جداول ذخیره شده در پایگاه داده شما توسط افرادی که داده شما را مدیریت می‌کنند تعریف می‌شود.

از آنجایی که نتایج پرس‌وجوهای تودرتو فقط به طور موقت ذخیره می‌شوند، متادیتا درباره نتایج در هیچ جا تعریف یا ذخیره نمی‌شود. مراحل بالا به شما کمک می‌کند به جای آن نتایج پرس‌وجو را به صورت دستی بررسی کنید.

پس از اینکه schemaها را برای پرس‌وجوهای تودرتو خود دارید، می‌توانید مراحل عیب‌یابی را دنبال کنید.

مطالعه بیشتر

آیا مشکل متفاوتی دارید؟

آیا هنوز گیر کرده‌اید؟

جستجو کنید یا از جامعه متابیس بپرسید.