2016-09-20 7 views
0

Hallo, Ich verwende den folgenden Code, um die Bestellung Operation durchzuführen, aber es wirft den Fehler, dass Invalid field projection wo die Beziehung die Spalte hat.PIG Fehler: beim Lesen des Attributs aus einer Relation

grunt> byts = ORDER B BY JB_DLT::job_id DESC;

ERROR

2016-09-20 07: 32: 56.815 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1025: Ungültige Feld Projektion. Das projizierte Feld [JB_DLT :: job_id] existiert nicht im Schema: Gruppe: Tupel (JB_ASGNMNT :: JB_DLT :: Job_ID: Bigdezimal, JOB_ASNMNT_STS_DLT :: Job_Zuteilung_Status_Cd: Chararray), a: bag {: Tupel (JB_ASGNMNT :: JB_DLT :: job_id: bigdecimal, JOB_ASNMNT_STS_DLT :: job_zuweisungsstatus_cd: chararray, JOB_ASNMNT_STS_DLT :: job_assignment_status_id: bigdecimal, JOB_ASNMNT_STS_DLT :: actual_status_dt: datetime)}.

grunt> describe B;

B: {Gruppen: (JB_ASGNMNT JB_DLT :: :: job_id: BigDecimal, JOB_ASNMNT_STS_DLT :: job_assignment_status_cd: chararray), a: {(JB_ASGNMNT :: :: JB_DLT job_id : BigDecimal, JOB_ASNMNT_STS_DLT :: job_assignment_status_cd: chararray, JOB_ASNMNT_STS_DLT :: job_assignment_status_id: BigDecimal, JOB_ASNMNT_STS_DLT :: actual_status_dt: datetime)}}

So lesen Sie diese Spaltendaten in der ORDER BY-Klausel. Bitte teilen Sie Ihre Meinung ..

+2

verwenden Sie entweder 'job_id' oder 'JB_ASGNMNT :: JB_DLT :: job_id' –

Antwort

1

Obwohl JB_DLT :: job_id existiert, aber Schwein-Latein nicht in der Lage ist zu finden (es gibt JB_ASGNMNT :: JB_DLT :: job_id), bearbeiten Sie die Anweisung B Hinzufügen JB_DLT :: job_id als job_id. dann:

grunt> byts = ORDER B BY job_id DESC;

Oder

byts = ORDER B BY JB_ASGNMNT::JB_DLT::job_id DESC; 
0

Sie können nicht auf einem gruppierten Daten ORDER BY. Verwenden Sie FOREACH, um die erforderlichen Daten zu generieren, und führen Sie anschließend ORDER BY aus.

C = FOREACH B GENERATE FLATTEN(group) AS (job_id, job_assignment_status_cd), a; 
byts = ORDER C BY job_id DESC; 
Verwandte Themen