Alibaba Cloud Big Data-Praxisbericht 6: Ändern Sie den Datentyp von Formularfeldern in der Produktionsumgebung


I. Einleitung

Bei der Entwicklung von Datenformularen in Alibaba Cloud DataWorks haben Sie möglicherweise diese Erfahrung gemacht: Die Felder in der Datentabelle stimmen nicht mit dem einzufügenden Datentyp überein.

Vor kurzem bin ich auf dieses Problem gestoßen, als ich eine Datentabelle im Data Warehouse verarbeitete. Dieses Formular zeichnet viele historische Daten auf, einschließlich des Status des Datensatzes, der aktualisierten Version usw. In den meisten Unternehmen müssen Sie sich nur ein Datenelement in der Benutzerdimension ansehen und zunächst eine Prioritätsbeurteilung basierend auf dem Status vornehmen. und dann nach der Version sortieren. zu weit entfernt; es ist aber auch notwendig, relevante historische Daten für die Verwendung durch andere Unternehmen aufzubewahren.

Jedes Mal, wenn die Tabelle gelesen wird, ist eine Deduplizierungsebene erforderlich, und die Fensterfunktion wird verwendet, um die Daten nach Status und Version zu sortieren und dann den Wert abzurufen. Der gesamte Prozess ist umständlich und ineffizient, und die Anzahl der Abfragen übersteigt die Anzahl der Ausführungen und der Planung des Data Warehouse. Dies stellt eine Verschwendung von Ressourcen dar. Daher habe ich vor, ihn zur Berechnung und Verwendung in das Data Warehouse aufzunehmen es direkt bei der Abfrage.

2. Fügen Sie neue Felder hinzu

Referenz: „Alibaba Cloud Big Data Practical Record 5: Ändern des Feldnamens des Produktionsumgebungsformulars“

Tatsächlich ist die gesamte Anforderung sehr einfach, nämlich das Hinzufügen eines Felds zur Entwicklungstabelle und das anschließende Veröffentlichen in der Entwicklungs- und Produktionsumgebung Fügen Sie dann dem Code Berechnungslogik hinzu, senden Sie ihn und veröffentlichen Sie ihn.

Der Datentyp des Rückgabewerts der Fensterfunktion wurde jedoch zu Beginn falsch eingeschätzt, was zu einer Nichtübereinstimmung zwischen dem neu hinzugefügten Feldtyp und dem Datentyp der eingefügten Daten führte, was zu einem Fehler führte, d. h. der festgelegte Datentyp lautet: und der von der Fensterfunktion zurückgegebene Datentyp INTist BIGINT.

Also muss ich das Loch füllen, das ich gegraben habe ...

3. Korrigieren Sie den Datentyp

3.1 Ändern Sie den Datentyp eines Feldes

Versuchen Sie, den Datentyp der formularbezogenen Felder zu ändern:

-- 修改开发环境表 table_name.col_1 的数据类型为 bigint
alter table xxx_dev.table_name change col_1 col_1 bigint;
-- 修改生产环境表 table_name.col_1 的数据类型为 bigint
alter table xxx.table_name change col_1 col_1 bigint;

Das Ergebnis ist ein Fehler:

FEHLGESCHLAGEN: Katalogdienst fehlgeschlagen, Fehlercode: 152, Fehlermeldung: ODPS-0110061: Ausführung von ddltask fehlgeschlagen-ODPS-0110061: Ausführung von ddltask fehlgeschlagen – Schemaentwicklungs-DDLs sind in Projekt:xxx_dev nicht aktiviert

Durchsuchen Sie die Schlüsselwörter in der Fehlermeldung, um die von Alibaba Cloud bereitgestellten Analysen und Lösungen wie folgt zu finden:

Verwandte Links: https://help.aliyun.com/zh/maxcompute/user-guide/odps-0110061

Der Grund für den Fehler liegt darin, dass das aktuelle Projekt standardmäßig keine Tabellenstrukturänderungen zulässt , z. B. das Hinzufügen von Strukturtyp-Unterspalten, das Löschen von Spalten, das Ändern der Spaltenreihenfolge und das Ändern von Spaltendatentypen.

Lösung: set project odps.schema.evolution.enable=true;Befehlsübermittlung hinzufügen.

Bild.png

Nach dem Hinzufügen des Befehls ist jedoch ein weiterer Fehler aufgetreten: Es liegt keine relevante Berechtigung zum Ausführen von Projektsicherheitsvorgängen vor.

FEHLGESCHLAGEN: ODPS-0420095: Zugriff verweigert – Autorisierung fehlgeschlagen [4003], Sie haben KEINE Berechtigung, den PROJEKTSICHERHEITSVORGANG für {acs:odps:*:projects/xxx_dev/authorization/properties/odps.schema.evolution.enable} durchzuführen. Kontext-ID:94737bec-78d6-4a00-xxxx. —>Tipps: Pricipal:[email protected]:xxxxx;

3.2 Tabelle löschen und neu erstellen

Das Ändern des Datentyps des Felds funktioniert nicht. Den entsprechenden Eingabeaufforderungen zufolge habe ich auch erfahren, dass die Spalte nicht gelöscht werden kann. Dies ist ein sicherer Vorgang. Dann müssen Sie die Tabelle löschen und neu erstellen.

Zum Löschen einer Tabelle müssen die Formulare in der Entwicklungsumgebung und in der Produktionsumgebung ausgeführt werden. Beim Erstellen einer Tabelle kann nur die Entwicklungsumgebungstabelle erstellt werden, und die Produktionsumgebungstabelle wird nach der Übermittlung zur Veröffentlichung automatisch generiert. Sie können sie natürlich auch manuell erstellen .

-- 删表
drop table if exists xxx_dev.table_name;
drop table if exists xxx.table_name;
-- 建表
create table if not exists xxx_dev.table_name(xx bigint comment'');
create table if not exists xxx.table_name(xx bigint comment'');

Andere Lösungen:

Wenn der Sortierwert der Fensterfunktion steuerbar ist, kann er durch eine 32-Bit-Ganzzahl mit Vorzeichen überschrieben werden, d. h. den Wertebereich: -2 31 ~ 2 31-1, oder durch castÄndern des von zurückgegebenen Datentyps Die Fensterfunktion. Beispiele sind wie folgt:

cast(row_number()over() as int) as "row_num"

3. Zusammenfassung

Der endgültige Plan soll genauer gesagt darin bestehen, die Tabelle zu löschen und neu zu erstellen, um den Zweck der „Änderung des Felddatentyps“ zu erreichen, aber es gibt einige Umwege in der Mitte.

Wenn es nur in der Entwicklungsumgebung verarbeitet wird, ist es noch bequemer. Löschen Sie die Tabelle und erstellen Sie die drop + createEntwicklungstabelle neu (), um den Datentyp der Datentabelle mit den einzufügenden Daten in Einklang zu bringen; oder ändern Sie den Datentyp von Erstellen Sie mit den eingefügten Daten ( cast) den Datentyp, der mit den Daten der erstellten Datentabelle übereinstimmt, oder ändern Sie den Datentyp der Datentabelle direkt ( Alter). Für diese Lösung sind Projektsicherheitsbetriebsberechtigungen erforderlich.

Wenn es jedoch in einer Produktionsumgebung freigegeben wird, ist es problematischer. Zusätzlich zu den oben genannten optionalen Methoden, die zwei Vorgänge erfordern, sind auch Berechtigungen für die Verwendung des Formulars erforderlich. Daher wird im Allgemeinen empfohlen, die Tabelle nicht zu löschen es sei denn, es ist notwendig!





Rückblick auf vergangene Ausgaben:

Alibaba Cloud Big Data-Praxisbericht 5: Ändern Sie den Feldnamen des Produktionsumgebungsformulars

Guess you like

Origin blog.csdn.net/qq_45476428/article/details/132289444