sql >> Database teknologi >  >> RDS >> Oracle

sqoop opdelt efter indstilling giver fejl, mens du bruger en afledt kolonne i opdeling efter mulighed

Brug underforespørgsel til at ombryde rækkenummerberegning, og brug derefter afledt kolonne i opdelingen.

   --query "select col1, ... colN, RANGEGROUP 
               from (select t.*, row_number() OVER (order by t.item_id ) AS RANGEGROUP
                      from table t ) s 
              where 1=1 and \$CONDITIONS"

row_number skal være deterministisk, det betyder, at når den udføres flere gange, skal den tildele nøjagtig det samme tal til alle rækker. Hvad kan der ske, hvis ORDER BY i OVER ikke indeholder en unik kolonne eller kombination:row_number kan returnere forskellige tal for de samme rækker. Og hvis du bruger det i split-by, vil du få duplikering, fordi den samme række kan være i opdelt område 1, f.eks. 1-100, i mapper2 vil sqoop udføre samme forespørgsel med filter for interval 2, f.eks. (101-200 ) den samme række kan også vises i det område. Sqoop kører den samme forespørgsel i forskellige containere (mappere) med forskellige betingelser for at få opdelte områder parallelt.

Hvis Id er int (og meget bedre, hvis det er jævnt fordelt), skal du bruge det ID. Hvorfor du muligvis har brug for rækkenummer, er når det er STRING kolonne. læs dette:https://stackoverflow.com/a/37389134/2700344 , split-column er ikke nødvendigvis en PK




  1. Hvordan opretter man forbindelse til MySQL på Amazon EC2 fra Windows?

  2. Opret database ved docker-compose opstart

  3. Forsøger at ændre en begrænsning i PostgreSQL

  4. hvordan man ændrer blokstatus for at indsætte i 10g ved hjælp af en knapudløser