# Snowflake

## Paso 1: cree un nuevo usuario/rol para Arcwise

Recomendamos crear un usuario y una función de Snowflake separados para el acceso a Arcwise para tener una mejor visibilidad y una gestión de acceso granular. (Es posible saltar al paso 2 y proporcionar en su lugar un conjunto de credenciales existente).

## (Opcional) Permitir la conexión desde la dirección IP de Arcwise

Si necesita agregar una dirección IP fija a su lista de permitidos o política de red, consulte nuestra[direccion-ip-fija-de-arcwise](https://docs.arcwise.app/espanol/configuracion-de-arcwise/conectar-el-almacen-de-datos/direccion-ip-fija-de-arcwise "mention") página.

### Crear un nuevo usuario/rol

Aquí proporcionamos un script para ayudar con la creación de roles y usuarios. Puede pegar esto directamente en Snowsight si tiene privilegios **SYSADMIN** o **ACCOUNTADMIN**.

{% hint style="danger" %}
**IMPORTANTE**

* ¡Tenga cuidado de reemplazar los **valores resaltados** en la consulta a continuación!
* **¡Asegúrese de ejecutar todas las consultas!** Seleccione todo el texto de la consulta antes de ejecutarla si usa Snowsight, o marque la casilla de verificación "Todas las consultas" si usa la consola heredada.
  {% endhint %}

De forma predeterminada, esto permitirá que la función Arcwise acceda a todos los esquemas en `$database_name`, pero esto se puede restringir si se prefiere (consulte `GRANT USAGE ON SCHEMA` resaltado a continuación). ¡Asegúrese de que cada consulta se ejecute correctamente!

```sql
-- (Optional) Edit these if you prefer something else.
SET role_name = 'ARCWISE_ROLE';
SET user_name = 'ARCWISE_USER';
-- (Optional) You can also use an existing warehouse if desired.
SET warehouse_name = 'ARCWISE_WAREHOUSE';

-- Define a password for the Arcwise user (ideally randomly generated). Remember it for later
SET user_password = '<your-password-here>';

-- Database you want to allow Arcwise to access and snapshot schema that
-- will be created in that database for data snapshot management
SET database_name = '<your-database-here>';
SET snapshot_schema_name = '_ARCWISE_SNAPSHOTS';

-- Database setup
CREATE DATABASE IF NOT EXISTS IDENTIFIER($database_name) COMMENT = 'Arcwise database';

-- Warehouse setup
CREATE WAREHOUSE IF NOT EXISTS IDENTIFIER($warehouse_name)
	warehouse_size = small
	warehouse_type = standard
	auto_suspend = 15
	auto_resume = true
	initially_suspended = true;

-- Role setup
CREATE ROLE IF NOT EXISTS IDENTIFIER($role_name) COMMENT = 'Arcwise default role';

-- User setup
CREATE USER IF NOT EXISTS IDENTIFIER($user_name)
	password = $user_password
	first_name = 'Arcwise'
	last_name = 'User'
	default_warehouse = $warehouse_name
	default_role = $role_name;

-- Assign user -> role
GRANT ROLE IDENTIFIER($role_name) TO USER IDENTIFIER($user_name);

-- Allow role -> warehouse & database
GRANT USAGE ON WAREHOUSE IDENTIFIER($warehouse_name) TO ROLE IDENTIFIER($role_name);
GRANT USAGE ON DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);

-- Allow role to access all schemas (and tables/views within the schema)
GRANT USAGE ON ALL SCHEMAS IN DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);
GRANT USAGE ON FUTURE SCHEMAS IN DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);
-- (Optional) To restrict access to certain schemas: comment out the two lines above and edit below
-- GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO ROLE IDENTIFIER($role_name);

GRANT SELECT ON ALL TABLES IN DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);
GRANT SELECT ON FUTURE TABLES IN DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);

GRANT SELECT ON ALL VIEWS IN DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);
GRANT SELECT ON FUTURE VIEWS IN DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);

-- Create snapshot schema and grant role ownership over that schema
SET arcwise_snapshots_schema = $database_name || '.' || $snapshot_schema_name;
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($arcwise_snapshots_schema) COMMENT = 'Arcwise-operated schema for managing data snapshots';
GRANT OWNERSHIP ON SCHEMA IDENTIFIER($arcwise_snapshots_schema) TO ROLE IDENTIFIER($role_name) REVOKE CURRENT GRANTS;

-- Allow Arcwise role to analyze query history & table usage activity
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE IDENTIFIER($role_name);
```

By default the above commands will *not* give the `SYSADMIN` role access to data managed by Arcwise. To have the Arcwise role inherit from `SYSADMIN` and therefore grant that role full access run the following command:

```sql
GRANT ROLE IDENTIFIER($role_name) TO ROLE SYSADMIN;
```

### Paso 2: agregue las credenciales de Snowflake en Arcwise

1. Vaya a la pestaña "Conexiones" en el panel de administración de Arcwise (<https://admin.arcwise.app/#/warehouse_connections>)
2. Haga clic en el botón "Crear" para agregar la primera conexión.
3. Complete las credenciales según las variables que completó anteriormente. Se pueden encontrar instrucciones adicionales para cada sección a continuación.

<figure><img src="https://content.gitbook.com/content/wI8nYxt7RQv62I15Xc6n/blobs/6vteOj6qJjkqe2ZXoEyY/Screenshot%202023-07-19%20at%2010.27.14%20AM.png" alt="" width="563"><figcaption></figcaption></figure>

<details>

<summary>Nombre</summary>

Un nombre fácil de usar que describe el propósito de la conexión. Se mostrará a los usuarios finales en Arcwise.

</details>

<details>

<summary>Cuenta</summary>

Este es el [identificador de su cuenta Snowflake](https://docs.snowflake.com/en/user-guide/admin-account-identifier#using-an-account-locator-as-an-identifier). Debe estar en el formato:

`account_locator.cloud_region_id.cloud`

EG: `uc1234.us-west-1.aws`&#x20;

En Snowsight, puede pasar el cursor sobre el menú de la cuenta en la parte inferior izquierda y hacer clic en **Copiar URL de la cuenta**; luego elimine el `https://` inicial y el `.snowflakecomputing.com` final

<img src="https://content.gitbook.com/content/wI8nYxt7RQv62I15Xc6n/blobs/iHJ6Pzle8hWOeb67kJNk/Screenshot%202023-06-06%20at%2012.23.57%20PM.png" alt="" data-size="original">

</details>

<details>

<summary>Depósito</summary>

Utilice el valor `$warehouse_name` de la consulta SQL (por ejemplo, `ARCWISE_WAREHOUSE`)

</details>

<details>

<summary>Base de Datos</summary>

Utilice el valor `$database_name` de la consulta SQL.

</details>

<details>

<summary>Esquema de instantánea</summary>

Utilice el valor `$snapshot_schema_name` de la consulta SQL.

</details>

<details>

<summary>Usuario Contraseña</summary>

`$user_name` y `$user_password` de la consulta SQL.

</details>

Todas las credenciales se almacenan de forma segura mediante cifrado de nivel bancario (256 bits). Una vez que presione Guardar y se haya agregado la conexión, puede cambiar a la pestaña "Tablas" para ver todas las tablas que estarán expuestas en Arcwise.

{% hint style="warning" %}
Si recibe un error que indica que el nombre de usuario/contraseña no funcionó, verifique que todas las consultas en el script "Crear un nuevo usuario/rol" se hayan ejecutado correctamente.
{% endhint %}
