Вытягивание таблицы снежинок в фрейм данных

#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. Рич — у меня была неправильная роль, указанная в качестве переменной. Теперь я могу получить доступ к таблице. Спасибо за помощь!