Большие запросы, зависающие с коннектором MongoDB Bi (и Tableau)
Я надеюсь, что кто-то, у кого есть опыт использования BI-коннектора MongoDB и Tableau, сможет мне помочь. Я полностью потерялся и понятия не имею, как решить эту проблему с соединителем BI.
В настоящее время я запускаю MongoDB и Tableau внутри кластера kubernetes. Внутри кластера у меня также есть модуль с BI Connector. Tableau успешно подключается к MongoDB через коннектор BI, и я могу создавать книги и визуализации с несколькими коллекциями из MongoDB внутри Tableau.
Моя проблема начинается с того, что некоторые большие запросы просто зависают и никогда не завершаются или не дают никаких ошибок. Я заметил это в Tableau, а также через клиент mysql cli, который я подключил к соединителю BI. В обоих случаях соединитель BI никогда не завершает запрос. Я знаю, что запрос имеет допустимый синтаксис SQL, поэтому я здесь совершенно в тупике.
Возможно, есть какое-то ограничение, с которым я сталкиваюсь, потому что я не использую продукт MongoDB Atlas?
Я включу некоторые запросы, которые определенно работают, и запрос, который не работает. Любая помощь будет очень признательна. Или, если у кого-нибудь есть понимание того, что может вызвать долгое зависание.
Ниже приведены два примера запросов, которые отлично работают:
SELECT
market,
CONVERT(date, date) as date,
clicks,
conversions,
cost,
impressions
FROM ad_metrics
SELECT
go.customer_id,
go.id as lead_id,
CONVERT(DATE_SUB(go.created_at, INTERVAL 7 HOUR), date) as date,
go.market as market,
go.make,
go.model,
go.no_way,
go.repair_location,
go.source as website_source,
go.utm_content,
go.utm_source,
go.post_tax_amount_requested
FROM god_objects go
WHERE (go.is_a_test = 0 OR go.is_a_test IS NULL)
AND (go.carparts = 0 OR go.carparts IS NULL)
AND (go.no_way = 0 OR go.no_way IS NULL)
и ниже запрос, который висит:
WITH tableau_ads as (
SELECT
market,
CONVERT(date, date) as date,
clicks,
conversions,
cost,
impressions
FROM ad_metrics
), tableau_leads as (
SELECT
go.customer_id,
go.id as lead_id,
CONVERT(DATE_SUB(go.created_at, INTERVAL 7 HOUR), date) as date,
go.market as market,
go.make,
go.model,
go.no_way,
go.repair_location,
go.source as website_source,
go.utm_content,
go.utm_source,
go.post_tax_amount_requested
FROM god_objects go
WHERE (go.is_a_test = 0 OR go.is_a_test IS NULL)
AND (go.carparts = 0 OR go.carparts IS NULL)
AND (go.no_way = 0 OR go.no_way IS NULL)
), tableau_sales as (
SELECT
q.id as quote_id,
go.id as lead_id,
j.id as job_id,
go.market,
CONVERT(DATE_SUB(go.sold_at, INTERVAL 7 HOUR), date) as date,
CONVERT(DATE_SUB(go.initial_job_date, INTERVAL 7 HOUR), date) as initial_job_date,
go.post_tax_amount_requested,
go.amount_collected,
go.customer_id,
go.make,
go.model,
go.repair_location,
go.source as website_source,
go.utm_content,
go.utm_source,
q.balance_amount_due,
q.assigned_technician_id,
q.payment_status,
q.quote_grand_total,
q.total_transaction_amount,
j.is_active,
j.technician_id
FROM quotes q
LEFT JOIN god_objects go ON go.id = q.lead_id
LEFT JOIN jobs j ON go.id = j.lead_id
WHERE (go.is_a_test = 0 OR go.is_a_test IS NULL)
AND (go.carparts = 0 OR go.carparts IS NULL)
AND go.initial_job_date IS NOT NULL
AND go.post_tax_amount_requested >= 200.0
) SELECT
tableau_leads.market,
tableau_leads.date,
sum(tableau_ads.clicks) as ad_clicks,
sum(tableau_ads.conversions) as ad_conversions,
sum(tableau_ads.cost) as ad_cost,
sum(tableau_ads.impressions) as ad_impressions,
COUNT(tableau_leads.lead_id) as lead_count,
COUNT(tableau_sales.quote_id) as sale_count,
SUM(tableau_leads.post_tax_amount_requested) as lead_amount_requested,
SUM(tableau_sales.post_tax_amount_requested) as sale_amount_requested
FROM tableau_leads
LEFT JOIN tableau_ads ON (tableau_leads.market = tableau_ads.market AND tableau_leads.date = tableau_ads.date)
LEFT JOIN tableau_sales ON (tableau_leads.market = tableau_sales.market AND tableau_leads.date = tableau_sales.date)
GROUP BY market, date
Что-то не так с моим SQL? Есть ли какие-либо другие проблемы? Опять же, любая помощь будет принята с благодарностью!