Вопрос или проблема
Меня это озадачивает: проверяет ли BigQuery внутренние ограничения и периодически удаляет их каким-то образом?
Позвольте объяснить: я добавил как PRIMARY, так и FOREIGN ключи в таблицу, которая заполняется один раз в день в 00:30 UTC. Я добавил ограничения в 09:12, а в 10:05 некоторые из них исчезли (не все…)
Я не понимаю, как это возможно. Я проверил задания BigQuery на уровне организации, журналы аудита, ничего, кроме моего собственного набора ограничений в 9:00.
У вас есть идеи, что могло пойти не так с установкой ограничений?
Заранее спасибо за вашу помощь.
PS: никаких загадок, вот скрипт, который я использовал для установки ключей:
ALTER TABLE `foxbrain_rds.orders_final` ADD PRIMARY KEY(id_order) NOT ENFORCED;
ALTER TABLE `foxbrain_rds.orders_final`
ADD FOREIGN KEY(fk_parser) REFERENCES `foxbrain_rds.parsers`(id_parser) NOT ENFORCED,
ADD FOREIGN KEY(fk_customer) REFERENCES `foxbrain_rds.customers`(id_customer) NOT ENFORCED,
ADD FOREIGN KEY(fk_payment_method) REFERENCES `foxbrain_rds.payment_methods`(id_payment_method) NOT ENFORCED,
ADD FOREIGN KEY(fk_merchant) REFERENCES `foxbrain_rds.merchants`(id_merchant) NOT ENFORCED;
Ответ или решение
Понимаю вашу озабоченность по поводу исчезновения первичных и внешних ключей в BigQuery. Давайте разберёмся с этой проблемой.
Во-первых, важно отметить, что в BigQuery ограничения (constraints), такие как первичные и внешние ключи, могут быть заданы как not enforced (не применяемые), что означает, что они не контролируются сервером. Это может быть одной из причин, почему вы не видите ожидаемых результатов, так как система не будет проверять и обеспечивать целостность этих ограничений.
Ваш сценарий добавления первичного и внешних ключей выглядит корректно, однако, когда вы устанавливаете их как NOT ENFORCED, фактически это делает их неактивными с точки зрения системы. В этом случае вы не получите никаких предупреждений о недопустимых значениях при загрузке данных, и сами ограничения могут быть удалены, если они не применяются, например, если вы повторно изменяете структуру таблицы или выполняете операции, которые могут не учитывать данные ограничения.
Вот несколько факторов и шагов, которые могли бы помочь вам в решении проблемы:
-
Проверка на конфликты: Если в таблице уже существуют данные, которые нарушают целостность внешних ключей, BigQuery может игнорировать эти ограничения. Убедитесь, что все значения в полях внешнего ключа соответствуют значениям в целевых таблицах.
-
Изменение схемы таблицы: Любые изменения схемы таблицы могут привести к неявному удалению ограничений. Убедитесь, что вы не выполняли никаких операций, которые могут затрагивать схему таблицы после добавления ограничений.
-
Переменные окружения и версии: Если у вас несколько версий вашего проекта или вы используете разные проекты/организации, убедитесь, что вы смотрите на правильное местоположение и версию таблицы.
-
Проверка на дублирование операций: Убедитесь, что вы не запускаете скрипты или процессы, которые могут повторно изменять таблицу, тем самым потенциально удаляя ваши ограничения.
-
Использование уведомлений: Настройка системы уведомлений или журналов для мониторинга изменения схемы таблицы может помочь вам выяснить, если что-то происходит автоматически, что вы не заметили.
-
Обратите внимание на документацию: Проверьте последнюю документацию BigQuery на предмет обновлений, в которых могут быть описаны изменения в управлении ограничениями и схемами.
Если ни одно из этих предложений не решает проблему, я рекомендую обратиться в службу поддержки Google Cloud. Они смогут предоставить дополнительную информацию о возможных причинах исчезновения ограничений и предложить конкретные решения, основанные на вашей ситуации.
Надеюсь, эта информация будет полезной и поможет вам разобраться с проблемой. Если у вас есть дополнительные вопросы или вы хотите обсудить конкретные аспекты глубже, не стесняйтесь спрашивать.