Exemples de distribution - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemples de distribution

Les exemples suivants montrent comment les données sont distribuées en fonction des options que vous définissez dans l'CREATETABLEinstruction.

DISTKEYexemples

Examinez le schéma de la USERS table dans la TICKIT base de données. USERIDest défini comme la SORTKEY colonne et la DISTKEY colonne :

select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'users'; column | type | encoding | distkey | sortkey ---------------+------------------------+----------+---------+--------- userid | integer | none | t | 1 username | character(8) | none | f | 0 firstname | character varying(30) | text32k | f | 0 ...

USERIDest un bon choix pour la colonne de distribution de ce tableau. Si vous interrogez la vue DISKUSAGE système SVV _, vous pouvez constater que la table est répartie de manière très uniforme. Les numéros de colonne sont basés sur zéro, tout comme USERID la colonne 0.

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name='users' and col=0 and rows>0 order by slice, col; slice| col | rows | minvalue | maxvalue -----+-----+-------+----------+---------- 0 | 0 | 12496 | 4 | 49987 1 | 0 | 12498 | 1 | 49988 2 | 0 | 12497 | 2 | 49989 3 | 0 | 12499 | 3 | 49990 (4 rows)

La table contient 49 990 lignes. La colonne (num_values) des lignes affiche que chaque tranche contient à peu près le même nombre de lignes. Les colonnes minvalue et maxvalue affichent la plage de valeurs sur chaque tranche. Chaque tranche inclut la quasi-totalité de la plage de valeurs. Il y a donc de fortes chances que chaque tranche participe à l'exécution d'une requête filtrant pour un groupe d'utilisateursIDs.

Cet exemple illustre la distribution sur un petit système de test. Le nombre total de tranches est généralement beaucoup plus élevé.

Si vous rejoignez ou regroupez fréquemment des membres à l'aide de la STATE colonne, vous pouvez choisir de distribuer sur la STATE colonne. L'exemple suivant montre un cas où vous créez une nouvelle table avec les mêmes données que la USERS table mais que vous leur attribuez la DISTKEY valeur à la STATE colonne. Dans ce cas, la distribution n’est pas aussi régulière. La tranche 0 (13 587 lignes) contient environ 30 % de lignes en plus que la tranche 3 (10 150 lignes). Dans une table beaucoup plus grande, ce degré d’asymétrie de la distribution peut avoir un impact négatif sur le traitement des requêtes.

create table userskey distkey(state) as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userskey' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 13587 | 5 | 49989 1 | 0 | 11245 | 2 | 49990 2 | 0 | 15008 | 1 | 49976 3 | 0 | 10150 | 4 | 49986 (4 rows)

DISTSTYLEEVENexemple

Si vous créez un nouveau tableau avec les mêmes données que le USERS tableau mais que vous définissez le paramètre DISTSTYLE toEVEN, les lignes sont toujours réparties uniformément sur les tranches.

create table userseven diststyle even as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userseven' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 12497 | 4 | 49990 1 | 0 | 12498 | 8 | 49984 2 | 0 | 12498 | 2 | 49988 3 | 0 | 12497 | 1 | 49989 (4 rows)

Cependant, du fait que la distribution n’est pas basée sur une colonne spécifique, le traitement des requêtes peut être dégradé, surtout si la table est jointe à d’autres tables. L’absence de distribution sur une colonne de jointure influence souvent le type d’opération de jointure qui peut être effectué de manière efficace. Les jointures, les agrégations et les opérations de regroupement sont optimisées lorsque les deux tables sont distribuées et triées sur leurs colonnes de jointure respectives.

DISTSTYLEALLexemple

Si vous créez une nouvelle table avec les mêmes données que la USERS table mais que vous définissez le DISTSTYLE paramètre toALL, toutes les lignes sont distribuées à la première tranche de chaque nœud.

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'usersall' and col=0 and rows > 0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 49990 | 4 | 49990 2 | 0 | 49990 | 2 | 49990 (4 rows)