Снежинка неверный идентификатор при выполнении соединения - PullRequest
0 голосов
/ 31 октября 2019

Я пытался выполнить внешнее соединение двух разных таблиц в двух разных схемах. Я пытаюсь отфильтровать ранее из таблицы вариантов символ, который меньше 4 и больше 5 цифр. Объединение не работало с простым предложением where в конце, отсюда и это решение.

Проблема в том, что если я не поставлю кавычки, Snowflake скажет, что я поставил недопустимые идентификаторы. Тем не менее, когда я запускаю это с кавычками, это работает, но я получаю в качестве значений в полях столбца raw.stitch_heroku.spree_variants.SKU только имя в качестве имени столбца, по всей таблице!

SELECT
    analytics.dbt_lcasucci.product_category.product_description,
    'raw.stitch_heroku.spree_variants.SKU'
FROM analytics.dbt_lcasucci.product_category
LEFT JOIN (
    SELECT * FROM raw.stitch_heroku.spree_variants
    WHERE LENGTH('raw.stitch_heroku.spree_variants.SKU')<=5
      and LENGTH('raw.stitch_heroku.spree_variants.SKU')>=4
) ON 'analytics.dbt_lcasucci.product_category.product_id'
      = 'raw.stitch_heroku.spree_variants.SKU'

Есть лиспособ обойти это? Я запутался и еще не нашел эту проблему на форумах!

спасибо заранее

1 Ответ

1 голос
/ 31 октября 2019

сначала одинарные кавычки определяют строковый литерал 'this is text', где двойные кавычки являются именами таблиц / столбцов "this_is_a_table_name"

добавление псевдонимов к таблицам делает SQL более читабельным, а команду дублируемой длины можно уменьшитьс интервалом, таким образом, это должно работать лучше:

SELECT pc.product_description,
    sp.SKU
FROM analytics.dbt_lcasucci.product_category AS PC
LEFT JOIN (
    SELECT SKU
    FROM raw.stitch_heroku.spree_variants 
    WHERE LENGTH(SKU) BETWEEN 4 AND 5
) AS sp
    ON pc.product_id = sp.SKU;

Таким образом, я сократил результаты подвыбора, так как вы использовали sku от sp, но, учитывая, что вы сравниваете product_id с sku в качестве вашегопример существует, вам не нужно присоединяться к sp.

неверные идентификаторы указывают на то, что что-то названо неправильно, первый шаг - проверить, существуют ли таблицы и столбцы названы так, как вы ожидаете, и типстолбцы одинаковы для предложения JOIN x ON y через:

describe table analytics.dbt_lcasucci.product_category;
describe table raw.stitch_heroku.spree_variants;
...