Format de fichier ORC
Le fichier ORC est divisé en plusieurs bandes et la bande est divisée en plusieurs groupes de lignes. Chaque groupe de lignes contient une partie des données de toutes les colonnes du fichier. Chaque groupe de lignes comporte 10 000 tuples de lignes par défaut. Lors de l'interrogation, filtrez uniquement au niveau de la couche RowGroup pour vérifier s'il peut y avoir des résultats dans chaque colonne. Il est très grossier et ne peut garantir que chaque ligne lue remplit les conditions.
![](https://img-blog.csdnimg.cn/20190517205607443.png)
Processus de lecture ORC
OrcFile.createReader () lit les informations de pied de page et de métadonnées du fichier et enregistre le Stripe dans le fichier. Chaque Stripe fait partie du segment de données qui contient toutes les colonnes. C'est la plus grande granularité du fichier Orc.
-
Créez un VectorizedRowBatch, cette chose est principalement responsable du stockage des données détectées. Le schéma de requête comporte plusieurs colonnes et plusieurs colonnes dans VectorizedRowBatch. Chaque colonne est un tableau de type de données primitif d'une longueur par défaut de 1 024.
-
Créez un objet RecordReaderImpl pour lire les données et construisez un filtre SargApplier pour créer un DataReader.
-
Lisez les données qui répondent aux exigences de la première ligne. RecordReaderImpl.advanceToNextRow (), lisez le premier Stripe
-
Le processus de lecture de Stripe: RecordReaderImpl.beginReadStripe ()
- Lire StripeInformation, y compris Stripe Footer
- Filtrez chaque RowGroup dans Stripe: RecordReaderImpl.pickRowGroups () pour générer un includedRowGroups. Selon cela, la position des données à lire est construite et le tableau d'octets d'origine des données impliquées est lu.
-
Remplir le lot: TreeReaderFactory.nextBatch ()
- Enfin, le batch doit être rempli selon le RowGroup qui est lu. Le batch est un tableau de types de données primitifs sans encapsulation et est très efficace.
Petite fosse
Si un lot a deux colonnes, la première colonne augmente de 1 à 100 et la deuxième colonne augmente également de 1 à 100, et la première colonne de la condition de filtre de requête est <50 et la deuxième colonne> 60, le lot sera également lu.