2016-12-22 1 views
1

Y a-t-il un moyen dans l'instruction d'extraction U-SQL de spécifier uniquement les colonnes d'entrée qui me concernent? Je travaille avec une base de données héritée qui exporte plusieurs tables vers csv avec environ 200 colonnes. Je me soucie seulement de 10 de ces champs. J'espérais faire quelque chose comme:Instruction d'extraction U-SQL - Travailler avec des centaines de colonnes

EXTRACT CustomerID:0 string, 
    StoreNumber:5 double, 
    ReceiptNumber:20 double, 
    Timestamp:125 int 
FROM "somefile.csv" 
USING Extractors.Csv(); 

L'idée serait de spécifier un index qui correspond à quelle colonne les données proviennent.

Y at-il quelque chose comme ça dans les travaux? Ou dois-je toujours définir les 200 colonnes? Je suis ouvert à d'autres solutions aussi. Merci!

Répondre

1

Il n'y a pas de moyen facile de faire cela comme vous l'avez décrit, mais cela ne serait pas long à écrire. Par exemple, j'utilise souvent Excel pour aider avec les scripts, par exemple coller les métadonnées connues pour le csv 200 colonne map puis à des types de données U-SQL, par exemple

Excel U-SQL helper

Vous pouvez créer un U-SQL view initial qui avait tout les colonnes en utilisant la méthode ci-dessus, puis créer une autre vue en fonction de la vue initiale pour les colonnes que vous voulez:

CREATE VIEW IF NOT EXISTS dbo.view1 
    AS 
EXTRACT col1 int, 
     col2 string, 
     col3 string, 
     col4 string, 
     col5 string 
FROM "/input/input44.txt" 
USING Extractors.Csv(); 


CREATE VIEW IF NOT EXISTS dbo.view2 
    AS 
SELECT col1, 
     col2 
FROM dbo.view1; 


@input = 
    SELECT * 
    FROM dbo.view2; 

J'utilise aussi parfois Visual studio Find and Replace with RegEx pour faire des choses semblables.