Scrydon

Noms de colonnes — gestion des en-têtes avec points et noms non compatibles SQL

Préservation sans perte des noms de colonnes fournis par la source, tels que `fius.fiu_id`, via une séparation nom physique/nom d'affichage, et comparaison de cette approche avec BigQuery, Snowflake, Databricks, Fabric, AWS Glue, Foundry et Atlan.

Les CSV produits dans la réalité comportent rarement des noms de colonnes compatibles SQL. Les en-têtes peuvent contenir des points (fius.fiu_id), des espaces (Customer Email), des caractères unicode (café) ou commencer par un chiffre (2024_revenue). La façon dont une plateforme de données traite ces noms en dit long sur son modèle d'utilisation.

Cette page décrit l'approche de Scrydon Analytics (la séparation nom physique/nom d'affichage de style Foundry/Atlan) et la compare aux autres plateformes.

Ce que fait Scrydon

Lorsque vous téléversez un fichier avec un en-tête pointé comme fius.fiu_id, Scrydon l'ingère sans perte :

CoucheValeur
Colonne physique StarRocksfius_fiu_id
column_name dans les métadonnées du cataloguefius_fiu_id
display_name dans les métadonnées du cataloguefius.fiu_id
Rendu dans l'interface (aperçu, vue schéma, dialogue d'ingestion)fius.fiu_id
Requêtes SQL que vous écrivez sur la tablefius_fiu_id (ou `fius_fiu_id` si vous préférez les guillemets)

L'en-tête brut est conservé comme nom d'affichage dans le catalogue, sans jamais être perdu. Le nom physique est normalisé pour satisfaire les règles d'identifiant StarRocks, ce qui simplifie le SQL — pas de guillemets obligatoires dans chaque requête, pas de rupture inattendue dans les outils BI qui construisent des identifiants automatiquement.

Règles de normalisation

Appliquées une seule fois, lors de l'inférence du schéma :

  • Tout caractère hors de [A-Za-z0-9_] devient _
  • Un chiffre en tête reçoit un préfixe _
  • Un résultat vide est remplacé par column
  • Le résultat est tronqué à 128 caractères (limite des identifiants StarRocks)
  • Dans une même table, les noms normalisés qui entrent en collision reçoivent un suffixe _2, _3, … dans l'ordre de la source

display_name n'est enregistré que lorsque la normalisation a modifié l'en-tête source, ou lorsque l'en-tête source était déjà compatible SQL mais a dû recevoir un suffixe pour éviter une collision.

Ce que vous écrivez en SQL

SELECT fius_fiu_id, fius_country, fius_annual_sar_volume
FROM compliance_authorities
WHERE fius_egmont_member = true;

L'interface de requête, les intégrations BI et les outils en aval opèrent tous sur fius_fiu_id. Le point n'apparaît que dans l'étiquette de l'interface. C'est la même convention que Foundry et Atlan utilisent depuis des années.

Ce qui se passe lors de l'écriture/ingestion

Les téléversements CSV envoient les lignes avec les en-têtes d'origine (fius.fiu_id). Le chemin d'écriture traduit automatiquement display_name → column_name avant la validation et le Stream Load, ce qui vous permet de continuer à téléverser des fichiers avec les en-têtes pointés sans avoir à renommer les colonnes dans le fichier source.

Comment les autres plateformes gèrent cela

PlateformeComportement avec fius.fiu_idSort des points
Scrydon AnalyticsPhysique : fius_fiu_id. Nom d'affichage : fius.fiu_id. L'interface montre l'original ; le SQL utilise la version normalisée.Métadonnées de catalogue de première classe.
Google BigQueryLe chargement automatique normalise silencieusement ._ et supprime l'original. Le champ description au niveau colonne existe mais il n'y a pas d'emplacement display_name.Perdu.
SnowflakeLes identifiants autorisent les points uniquement entre guillemets doubles ("fius.fiu_id"). La plupart des équipes normalisent au chargement car chaque requête nécessite ensuite des guillemets.Optionnel, peu pratique.
Databricks (Delta + Unity Catalog)Sans correspondance de colonnes : strict Parquet, aucun point autorisé. Avec delta.columnMapping.mode='name' : noms arbitraires, mais le SQL doit utiliser des backticks (`fius.fiu_id`). Auto Loader / COPY INTO normalisent par défaut.Optionnel via une fonctionnalité opt-in ; peu courant en pratique.
Microsoft Fabric / SynapseLe Lakehouse est Delta — identique à Databricks. Synapse SQL autorise les points entre guillemets ; Power BI utilise des références entre crochets ([fius.fiu_id]). La plupart des équipes normalisent.Optionnel, rarement conservé brut.
AWS Glue / AthenaLe catalogue Glue stocke n'importe quel nom ; Athena lit avec des backticks. Les crawlers normalisent les caractères problématiques par défaut.Optionnel.
Palantir FoundrySépare le nom physique (normalisé, compatible SQL) et le nom d'affichage (original). L'interface montre l'affichage ; Spark/SQL utilise le physique.Métadonnées de première classe.
Atlan / CollibraMême approche que Foundry — nom physique plus nom métier / nom d'affichage. La lignée et les requêtes utilisent le physique, l'interface utilise l'affichage.Métadonnées de première classe.
Datadog / OpenTelemetryLes points représentent une hiérarchie sémantique (http.status_code). Stockés comme colonnes plates avec des points littéraux dans leur datastore de colonnes personnalisé ; ou imbriqués comme structures dans les entrepôts.De première classe, mais comme convention de schéma.

L'industrie se regroupe essentiellement en trois camps :

  • Normaliser et oublier (BigQuery, Databricks/Snowflake/Fabric par défaut) : peu coûteux, avec perte d'information, ergonomique en SQL — mais l'original est perdu à jamais.
  • Citer et autoriser (correspondance de colonnes Databricks, identifiants entre guillemets Snowflake) : sans perte sur disque — mais chaque requête, outil BI et connecteur a besoin d'une logique de citation, ce qui génère une friction ergonomique importante.
  • Séparation physique/affichage (Foundry, Atlan, Scrydon) : nom normalisé en SQL, original conservé comme métadonnées de catalogue, les étiquettes UI/BI affichent l'original. C'est la « bonne » réponse pour les plateformes de type catalogue — nous l'avons choisie pour les mêmes raisons que Foundry et Atlan.

Pourquoi la séparation physique/affichage

Scrydon Analytics est un catalogue, pas un entrepôt brut. L'en-tête d'origine est une information. Le supprimer (modèle BigQuery) fait réussir les téléversements mais perd la provenance. Forcer chaque requête à utiliser des guillemets (modèle Snowflake / correspondance de colonnes Databricks) fait réussir les téléversements mais reporte la friction sur chaque consommateur en aval.

Concrètement :

  1. Le re-téléversement du même fichier fonctionne. Déposez à nouveau le CSV, le chemin d'écriture résout les en-têtes pointés via display_name → column_name automatiquement. Vous n'avez pas à renommer les colonnes dans la source.
  2. Les outils BI et le SQL embarqué restent simples. Un classeur Tableau, un notebook d'analyste ou un SELECT fius_fiu_id dans un workflow n'ont pas besoin de connaître le point.
  3. Le catalogue est auditable. Quand une colonne a été renommée lors de l'ingestion, ce fait est interrogeable (display_name IS NOT NULL) — utile pour le triage opérationnel lorsque quelqu'un se demande pourquoi sa requête sur fius.fiu_id renvoie « la colonne n'existe pas ».
  4. La migration entrante et sortante est symétrique. L'export vers CSV utilise le nom d'affichage ; les consommateurs récupèrent le fichier dans la forme qu'ils avaient envoyée.

Ce qui est normalisé en pratique

En-tête sourcePhysique (column_name)display_name stocké
customer_idcustomer_idnull
fius.fiu_idfius_fiu_idfius.fiu_id
Customer EmailCustomer_EmailCustomer Email
2024_revenue_2024_revenue2024_revenue
cafécaf_café
`` (vide)column`` (chaîne vide)

Deux en-têtes distincts qui se normalisent en la même chaîne reçoivent un suffixe dans l'ordre de la source — fius.fiu_id devient fius_fiu_id, et un fius_fiu_id ultérieur dans le même fichier devient fius_fiu_id_2. Le display_name des deux conserve l'original verbatim, de sorte que l'interface ne les confond jamais.

Limites

  • Les identifiants StarRocks sont ASCII uniquement et limités à 128 caractères. Les en-têtes de plus de 128 caractères sont tronqués après la normalisation ; l'original complet est toujours conservé dans display_name.
  • Quelques caractères (codes de contrôle, NUL) sont supprimés avec les autres. Si votre CSV utilise un caractère exotique que vous souhaitez spécifiquement conserver, exposez-le via description plutôt que d'espérer le trouver dans display_name.
  • Les tables schema-first (où vous avez déclaré des colonnes explicitement) contournent la normalisation — les colonnes déclarées doivent être compatibles SQL au moment de la création de la table. La normalisation ne s'applique qu'aux chemins d'ingestion data-first.

Voir aussi

Sur cette page

Sur cette page