#python #sql #jupyter-notebook #snowflake-cloud-data-platform
Вопрос:
Я продолжаю получать и ошибку «Ошибка программирования: 002003 (42502): Ошибка компиляции SQL: Объект «Таблица» не существует или не авторизован. Я использую следующий код:
con = snowflake.connector.connect(
user = "user.name",
authenticator="externalbrowser",
warehouse = "ware house name",
database = "db name",
schema = "schema name"
)
cur.con.cursor()
sql = "select * from Table"
cur.execute(sql)
df = cur.fetch_pandas_all()
Когда я выполняю код в записной книжке Jupyter, открывается окно браузера и проверяет подлинность моих учетных записей, но когда он попадает в строку выполнения sql, появляется ошибка и сообщает мне, что таблица не существует. Когда я открываю Snowflake в своем браузере, я вижу, что таблица действительно существует в правильном хранилище, базе данных и схеме, которые у меня есть в коде.
Кто-нибудь еще когда-нибудь испытывал это? Нужно ли мне авторизовать своего пользователя, чтобы получить доступ к этой таблице с помощью Python и Jupyter Notebook? Любая помощь или предложения по этому поводу были бы великолепны! Заранее спасибо.
Комментарии:
1. Не могли бы вы проверить фактический запрос, отправленный Snowflake, на странице истории ? Существует вероятность того, что имя таблицы чувствительно к регистру и требует переноса с
SELECT * FROM "Table_name_here"
2. Я проверил историю, похоже, что большинство из них терпят неудачу. Я попытался заключить имя таблицы в двойные кавычки, но скрипт все еще не работает. Есть еще какие-нибудь предложения?
Ответ №1:
Скорее всего, вашему сеансу не назначена роль (текущая роль). Вы можете добавить роль в свой список параметров сеанса подключения, например, добавить что-то вроде следующего
role = 'RICH_ROLE',
Возможно, вы захотите рассмотреть возможность установки роли по умолчанию для своего пользователя.
ALTER USER userNameHere SET DEFAULT_ROLE = 'THE_BEST_ROLE';
ссылка на документы: https://docs.snowflake.com/en/sql-reference/sql/alter-user.html
Кроме того, если все остальное не удается, используйте полное имя таблицы, обратите внимание, что это не сильно поможет, если роль не задана:
sql = "select * from databaseName.schemaName.TableName"
Я надеюсь, что это поможет…Рич
p.s. Если этот (или другой) ответ вам поможет, пожалуйста, найдите минутку, чтобы «принять» ответ, который помог, нажав на галочку рядом с ответом, чтобы переключить его с «серого» на «заполнено».
Комментарии:
1. Спасибо за предложение. Когда я попробовал это с моей ролью, она сказала, что роль не существует или не авторизована. У него действительно есть «-» в названии роли — может ли это иметь какое-то отношение к этому? Я также попытался ввести все «Имя базы данных».» Имя схемы».» Имя таблицы» в sql-запросе
2. если вы попытались использовать роль и не смогли, то у вас нет доступа к ней, поэтому вам нужно будет поговорить с администратором и/или следить за процессом вашей команды, чтобы получить роль. Если вы используете WebUI с тем же именем пользователя и ролью, что и ваш код, и можете запросить таблицу в WebUI, но не можете в коде, то ваш текущий контекст в сеансе вашего кода неверен, что-то не так с параметрами вашего подключения.
3. Рич — у меня была неправильная роль, указанная в качестве переменной. Теперь я могу получить доступ к таблице. Спасибо за помощь!