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.
Performances des requêtes Amazon Redshift Spectrum
Cette rubrique explique comment améliorer les performances des requêtes Redshift Spectrum.
Observez le plan de requête afin de déterminer quelles étapes ont été transmises à la couche Amazon Redshift Spectrum.
Les étapes ci-après sont liées à la requête Redshift Spectrum :
-
S3 Seq Scan
-
S3 HashAggregate
-
S3 Query Scan
-
Scan Seq PartitionInfo
-
Partition Loop
L’exemple suivant présente le plan d’une requête qui joint une table externe à une table locale. Notez les HashAggregate étapes S3 Seq Scan et S3 qui ont été exécutées sur les données d'Amazon S3.
explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)
Notez les éléments suivants dans le plan de requête :
-
Le nœud
S3 Seq Scan
présente le filtrepricepaid > 30.00
qui a été traité dans la couche Redshift Spectrum.Un nœud de filtre sous le nœud
XN S3 Query Scan
indique le traitement des prédicats dans Amazon Redshift au-dessus des données renvoyées depuis la couche Redshift Spectrum. -
Le nœud
S3 HashAggregate
référence le groupement dans la couche Redshift Spectrum correspondant au groupe par la clause (group by spectrum.sales.eventid
).
Pour améliorer les performances de Redshift Spectrum, procédez comme suit :
-
Utilisez des fichiers de données au format Apache Parquet. Parquet stocke les données sous forme de colonnes, de sorte que Redshift Spectrum peut éliminer les colonnes inutiles de l’analyse. Si les données sont au format texte, Redshift Spectrum doit analyser l’intégralité du fichier.
-
Utilisez plusieurs fichiers afin d’optimiser le traitement parallèle, Utilisez des fichiers d’une taille supérieure à 64 Mo. Faites en sorte que tous les fichiers aient à peu près la même taille afin que la charge de travail soit équitablement distribuée. Pour plus d'informations sur les fichiers Apache Parquet et les recommandations de configuration, voir Format de fichier : configurations
dans la documentation d'Apache Parquet. -
Utilisez dans vos requêtes aussi peu de colonnes que possible.
-
Placez vos grandes tables de faits dans Amazon S3 et conservez vos tables de dimensions plus petites et fréquemment utilisées dans votre base de données Amazon Redshift locale.
-
Mettez à jour les statistiques des tables externes en définissant le TABLE PROPERTIES numRows paramètre. Utilisez CREATE EXTERNAL TABLE ou ALTER TABLE pour définir le TABLE PROPERTIES numRows paramètre afin qu'il reflète le nombre de lignes du tableau. Amazon Redshift n'analyse pas des tables externes pour générer les statistiques de table utilisées par l'optimiseur de requête afin de générer un plan de requête. Si des statistiques de table ne sont pas définies pour une table externe, Amazon Redshift génère un plan d’exécution de requête. Amazon Redshift génère ce plan en partant du principe que les tables externes sont les plus grandes tables et les tables locales les plus petites.
-
Le planificateur de requêtes Amazon Redshift pousse les prédicats et les agrégations vers la couche de requêtes Redshift Spectrum lorsque cela est possible. Lorsque de grandes quantités de données sont renvoyées depuis Amazon S3, le traitement est limité par les ressources de votre cluster. Redshift Spectrum procède à un dimensionnement automatique afin de traiter les requêtes volumineuses. Ainsi, les performances globales s’améliorent chaque fois que vous pouvez transmettre le traitement à la couche Redshift Spectrum.
-
Ecrivez les requêtes de façon à utiliser des filtres et des regroupements qui peuvent être transmis à la couche Redshift Spectrum.
Voici quelques exemples d’opérations pouvant être transmises à la couche Redshift Spectrum :
-
GROUPClauses BY
-
Conditions de comparaison et conditions de correspondance de modèles, telles que. LIKE
-
Fonctions d'agrégationCOUNT, telles queSUM,AVG,MIN, etMAX.
-
Fonctions de chaîne.
Les opérations qui ne peuvent pas être transférées vers la couche Redshift Spectrum incluent DISTINCT et ORDER BY.
-
-
Utilisez des partitions afin de limiter les données analysées. Partitionnez les données en fonction des prédicats de requête les plus courants, puis réduisez les partitions en filtrant leurs colonnes. Pour de plus amples informations, consultez Partitionnement des tables externes Redshift Spectrum.
Interrogez SVL_S3PARTITION afin d’afficher le total des partitions et les partitions qualifiées.
-
Utilisez AWS Glue le générateur de statistiques pour calculer les statistiques au niveau des colonnes pour AWS Glue Data Catalog les tables. Une fois les statistiques AWS Glue générées pour les tables du catalogue de données, Amazon Redshift Spectrum utilise automatiquement ces statistiques pour optimiser le plan de requête. Pour plus d'informations sur le calcul des statistiques au niveau des colonnes à l'aide de cette AWS Glue méthode, consultez la section Utilisation des statistiques des colonnes dans le Guide du AWS Glue développeur.