Halten Anvil.works im Einklang mit Ihrer DuckDB-Datei, nach einem Zeitplan
Schreiben Sie die SQL-Abfrage einmal. Query Streams führt sie nach Ihrem Zeitplan aus – von alle fünf Minuten bis wöchentlich – und schreibt die Zeilen in Ihre Anvil.works-Datentabelle. Zeilen können anhand eines Schlüssels abgeglichen werden, sodass Änderungen direkt übernommen und nicht bearbeitete Zeilen entfernt oder einfach angehängt werden. Kein Zapier, keine Skripte, kein Export erforderlich. Die erste Ausführung dauert etwa 15 Minuten und ist im kostenlosen Plan enthalten.
Was am Ende dabei herauskommt
Eine Anvil.works-Datentabelle, die die von Ihrer DuckDB-Abfrage zurückgegebenen Zeilen enthält und regelmäßig, von fünf Minuten bis wöchentlich, aktualisiert wird, wobei bei jedem Durchlauf eine Bestätigung der Änderungen erstellt wird. Zum Beispiel so:
DuckDB holds your data in a file. Your team works in Anvil.works. The usual bridge is a hand-written import in your app that breaks quietly and copies one row at a time. Query Streams Automation does it differently: the Agent that already reads your DuckDB file runs your saved SQL on a schedule and writes the whole result into Anvil.works in one pass, matching rows by a key so the data table stays correct rather than growing.
Was Sie benötigen
Ein Query Streams-Konto
Für diesen Leitfaden reicht der kostenlose Tarif aus. Melden Sie sich an unter mein.querystreams.de.
DuckDB ist über den Agenten verbunden.
The Agent installed on the computer that holds your DuckDB file, or on one that reads it from a network share, with the connection added in Data Agents. Not done yet? Verbinden Sie zuerst DuckDB.Es dauert ungefähr zehn Minuten.
Eine gespeicherte Anfrage
Die SELECT-Anweisung, die Sie synchron halten möchten, wird gespeichert in Abfrage-GeneratorSchritt 1 unten zeigt ein Beispiel. Wenn geänderte Zeilen direkt aktualisiert werden sollen, fügen Sie eine Spalte hinzu, die pro Zeile eindeutig ist, z. B. eine ID.
Ihr Anvil.works-Login
Geben Sie die HTTPS-Adresse Ihrer Anvil-App und den Connector-Schlüssel ein, den Sie in der App mit `connector.init_connector("key")` aus dem Modul `Query Streams` festgelegt haben. Query Streams prüft die Antworten der App und listet deren Datentabellen auf.
Wo findet die Arbeit statt? Auf dem Computer, auf dem der Agent läuft, wird die Abfrage planmäßig ausgeführt und die Ergebnisse in Anvil.works gespeichert. Daher muss dieser Computer eingeschaltet bleiben. Ihr Browser kann geschlossen werden. Query Streams selbst speichert die Ergebnisse nicht.
File on another computer? The Agent does not have to run on the computer that holds your DuckDB file: it can read the file from a network share. Reaching a file on a network share, below, shows what that takes.
Einrichtung in sechs Schritten
-
Speichern Sie die Abfrage, die Sie synchron halten möchten.
Öffnen Abfrage-GeneratorWählen Sie Ihre DuckDB-Verbindung (noch nicht verbunden?). Hier beginnenSchreiben Sie in Anvil.works die SELECT-Anweisung, die genau die gewünschten Zeilen und Spalten zurückgibt. Diese Anweisung ruft einige Spalten aus einem Bestellungen Tisch:
Beispiel · SQLSELECT order_id, customer_name, order_total FROM main.orders ORDER BY order_total DESC LIMIT 100;
Führe es dann aus. Speichern Sie Geben Sie der Abfrage einen aussagekräftigen Namen, z. B. „Bestellungen für Anvil.works“. Verwenden Sie in der SELECT-Anweisung eine Spalte, die pro Zeile eindeutig ist. BestellnummerDas ist der Schlüssel, den Full Sync verwendet, um Zeilen direkt zu aktualisieren. Bearbeiten und speichern Sie die Abfrage später erneut, und die Automatisierung übernimmt die Änderung beim nächsten Durchlauf.
-
Öffnen Sie Automation und wählen Sie Anvil.works aus.
Im Portal öffnen Automatisierung (Top-Menü) Streams → Geplant → Automatisierung) und klicken Neue AutomatisierungDer Zauberer hat fünf kurze Schritte. Schritt 1 Klicken Sie auf Anvil.works Karte.
Sehen Sie stattdessen „Bevor Sie beginnen“? Der Assistent öffnet sich erst, wenn ein Agent online ist, über eine Verbindung verfügt und mindestens eine gespeicherte Abfrage vorhanden ist. Auf der Seite wird angezeigt, welche der drei Komponenten fehlt, und ein Link dazu bereitgestellt.
-
Connect Anvil.works
An Schritt 2 Die Seite führt Sie durch die Anvil-Seite: Fügen Sie den Query Streams-Abhängigkeitscode zu Ihrer App hinzu unter Einstellungen → Abhängigkeiten → Drittanbieter, erstellen Sie ein Servermodul mit
from querystreams import connectorundconnector.init_connector("Ihr Schlüssel")und klicken Sie Sicheren Schlüssel generieren Um diesen Schlüssel zu erstellen, geben Sie dann Ihren ein. Anvil App URL und dasselbe Connector-Authentifizierungsschlüssel und klicken Sie Verbindung testenIhre App benötigt Beschleunigte Tabellen Eingeschaltet (Einstellungen → Datentabellen); die Seite überprüft dies erneut für Sie. -
Wähle aus, wo die Zeilen landen
An Schritt 3 Wähle die Datentabelle Die Zeilen sollten eingefügt werden. Erstellen Sie die Tabelle zunächst in Ihrer Anvil-App, falls Sie eine leere Tabelle wünschen. Sind bereits Zeilen vorhanden, werden diese in einer Vorschau angezeigt und die Auswirkungen der einzelnen Synchronisierungsmodi erläutert. Pro Tabelle ist eine Automatisierung möglich.
-
Wählen Sie die Abfrage aus und entscheiden Sie, wie die Zeilen landen.
An Schritt 4 öffne die Gespeicherte Abfrage Wählen Sie die Abfrage aus Schritt 1 aus. Query Streams führt sie einmal aus, um die Spalten zu lesen, zeigt Ihnen die Anzahl der zurückgegebenen Zeilen an und präsentiert zwei Auswahlmöglichkeiten:
Anhängen · schnellAnhängen
Bei jedem Durchlauf werden die Zeilen der Abfrage am Ende der Datentabelle hinzugefügt. Es werden weder Daten aktualisiert noch gelöscht. Daher eignet sich diese Methode ideal für die schnelle Erfassung von Protokollen, Ereignissen und Verlaufsdaten. Eine Schlüsselspalte ist nicht erforderlich. Eine unveränderte Zeile wird nicht erneut hinzugefügt; eine Zeile mit geänderten Werten wird als neue Zeile darunter eingefügt, die alte Zeile bleibt erhalten.
Vollständige Synchronisierung · SpiegelVollständige Synchronisation
Zeilen werden durch ein Schlüssel Eine Spalte wie beispielsweise eine Bestellnummer. Neue Zeilen werden hinzugefügt, geänderte Zeilen werden direkt aktualisiert und Zeilen, die nicht mehr von der Abfrage zurückgegeben werden, werden entfernt. Dies gilt auch für Zeilen, die manuell in die Datentabelle eingegeben wurden. Manuelle Eingaben werden daher in einer separaten Datentabelle gespeichert. Diese Methode eignet sich für Bestandsverwaltung, Pipelines, Stammdaten und Dashboards.
Die vollständige Synchronisierung wird pro Spalte festgelegt, was sie in einer gemeinsam genutzten Datentabelle nützlich macht:
- Schlüssel
- Die Spalte, die eine Zeile identifiziert, zum Beispiel BestellnummerEs muss im Abfrageergebnis eindeutig sein; Query Streams prüft das für Sie und weist Duplikate zurück.
- Synchronisierung
- Die Daten werden bei jedem Durchlauf aus DuckDB überschrieben. Wenn jemand eine Sync-Spalte in Anvil.works bearbeitet, wird beim nächsten Durchlauf der ursprüngliche Wert wiederhergestellt.
- Bewahren
- Die Daten werden beim ersten Eintreffen der Zeile erfasst und nie wieder verglichen. Daher löst eine Änderung in DuckDB keine Aktualisierung aus. Für Notizen, Verantwortliche und Folgetermine, die Ihr Team manuell eingibt, verwenden Sie eine Spalte, die nicht in der Abfrage enthalten ist: Spalten, die nur in Anvil.works existieren, werden bei einer Synchronisierung nie berücksichtigt.
Welches ist schneller? „Anhängen“ schreibt Daten, ohne sie vorher einzulesen. „Vollständige Synchronisierung“ liest die Datentabelle, vergleicht jede Zeile und schreibt nur die Unterschiede. Das dauert zwar länger, aber die Datentabelle entspricht immer der Abfrage. Sie können später im Bearbeitungsbereich der Automatisierung umschalten.
Für eine Datentabelle, der Sie vertrauen möchten, klicken Sie Alle Spalten als Synchronisierungsspalten erstellenKlicken Sie anschließend auf das Schlüsselsymbol auf Bestellnummer um es zu machen SchlüsselQuery Streams durchsucht das gesamte Ergebnis, um die Eindeutigkeit des Schlüssels zu bestätigen, und warnt Sie, falls dies nicht der Fall ist. Speichern Sie die Notizen Ihres Teams in Spalten, die nicht Teil der Abfrage sind; diese werden niemals geändert. Für ein Protokoll, das stetig wachsen soll, klicken Sie hier. Alle Spalten als „Beibehalten“ formatieren Klicken Sie stattdessen und überspringen Sie die Taste. Weitermachen.
-
Lege den Zeitplan fest, gib ihm einen Namen, erstelle ihn.
An Schritt 5 wählen Nach Zeitplan ausführen und wähle ein Frequenz:
Frequenz Läufe Alle 5 Minuten alle 5 Minuten, die schnellste erlaubte Alle 15 Minuten alle 15 Minuten Alle 30 Minuten alle 30 Minuten Stündlich zu Beginn jeder Stunde Täglich um 9 Uhr jeden Tag um 9:00 Uhr, die Standardzeit Täglich um 6 Uhr morgens jeden Tag um 6:00 Uhr Werktags um 9 Uhr Montag bis Freitag um 9:00 Uhr Wöchentlich (Montag, 9 Uhr) jeden Montag um 9:00 Uhr Benutzerdefinierter Zeitplan Ihre eigenen Minuten, Stunden, Wochentage oder Tage des Monats Die Zeiten folgen dem Zeitzone Sie wählen aus, wobei die Standardeinstellung Ihres Browsers standardmäßig angezeigt wird. Sie können auch auswählen Nur Handbuch und Presse ausführen. Sie können die Automatisierung jederzeit starten; ein Zeitplan lässt sich später im Bearbeitungsbereich der Automatisierung hinzufügen. Geplante Ausführungen erfolgen auf dem Agenten und laufen daher auch dann weiter, wenn Ihr Browser geschlossen ist. Falls der Computer, auf dem der Agent läuft, zum Zeitpunkt einer geplanten Ausführung ausgeschaltet ist, wird die verpasste Ausführung einmalig kurz nach dem Neustart des Agenten wiederholt.
Gib ihm ein Integrationsnamewie beispielsweise „Bestellungen an Anvil.works, täglich“, überprüfen Sie die Bereit zum Erstellen Zusammenfassung und Klick Automatisierung erstellenZurück auf der Seite „Automatisierung“, drücken Sie ausführen. Führen Sie die erste Synchronisierung jetzt durch, anstatt auf den Zeitplan zu warten. Öffnen Sie Anvil.works: Die Zeilen befinden sich dort unter Ihren Spaltenüberschriften.
Das war’s. Die Datentabelle hält sich ab sofort selbst aktuell. Nichts verlässt Ihr Netzwerk außer den von der Abfrage zurückgegebenen Zeilen, und niemand muss mehr daran denken, irgendetwas auszuführen.
Was Sie im Anschluss sehen
Der Automatisierungsseite Listet alle Automatisierungen mit Status, Quelle, Ziel, Schlüssel, Zeitplan, letzter Synchronisierung und Zeilenanzahl auf. Öffnen Sie eine für die Hinrichtungen Registerkarte: Jeder Durchlauf mit seinem Auslöser (manuell oder geplant), seiner Dauer und den erstellten, aktualisierten, gelöschten und unveränderten Zeilen. Leistung Die Registerkarte zeigt die verarbeiteten Daten und die Erfolgsquote über einen Zeitraum von 7 bis 90 Tagen an.
Man wird benachrichtigt, wenn es aufhört.
Jede Organisation hat eine Synchronisierungsprobleme Alarmregel von Anfang an: Bei einem Synchronisierungsfehler erhalten Sie eine In-App-Benachrichtigung und eine E-Mail, und nach erfolgreicher Wiederherstellung eine weitere. Pro Vorfall wird nur eine Nachricht versendet, nicht pro Wiederholungsversuch. Sie können diese Funktion deaktivieren oder die Kanäle unter „Streams“ → „Benachrichtigungen & Berichte“ ändern.
Es pausiert sich selbst, wenn es sollte
Wenn Anvil.works die Verbindung nicht mehr akzeptiert oder der Datenkonnektor gelöscht wird, pausiert die Automatisierung und gibt den Grund an. Stellen Sie die Verbindung wieder her oder wählen Sie eine neue Quelle und klicken Sie auf „Fortsetzen“. Andere Fehler lassen den Zeitplan weiterlaufen und werden in der entsprechenden Zeile angezeigt.
Schlüssel müssen eindeutig sein
Vor jedem vollständigen Synchronisierungslauf prüft Query Streams, ob die Schlüsselwerte im Abfrageergebnis eindeutig sind, und verweigert den Lauf, falls dies nicht der Fall ist. So wird sichergestellt, dass keine unvollständigen Daten in Ihrer Datentabelle landen. Die Schlüsselspalte bleibt in Anvil erhalten; Spalten, die Ihre Abfrage nicht berücksichtigt, werden durch eine Synchronisierung niemals gelöscht.
Was die Pläne erlauben
Die Automatisierung ist in jedem Tarif enthalten, auch im kostenlosen, und es gibt keine Begrenzung hinsichtlich der Anzahl der erstellbaren Automatisierungen. Die einzelnen Tarife beschränken sich jedoch darauf, wie viele Zeilen eine Abfrage pro Ausführung zurückgeben darf:
| Planen | Zeilen pro Durchlauf |
|---|---|
| Kostenlos | 125 |
| Persönlicher Kern | 500 |
| Personal Plus | 1,000 |
| Kerngeschäft | 2,500 |
| Business Plus | 5,000 |
| Business Max | 10,000 |
| Enterprise Core | 25,000 |
| Enterprise Plus | 100,000 |
| Enterprise Max | 250,000 |
Wenn eine Abfrage weitere Ergebnisse liefert, wird die Ausführung fortgesetzt, anstatt abgebrochen zu werden. Die Automatisierung zeigt Ihnen an, welcher Plan am besten passt, oder schlägt das Hinzufügen eines Filters, z. B. eines Datumsbereichs, vor. Jede erfolgreiche Ausführung wird außerdem auf Ihr Datenkontingent angerechnet, das gleiche Kontingent, das auch Ihre Excel- und Tabellenkalkulationsabfragen nutzen. Siehe die Preisseite für die Zulagen.
Gute nächste Schritte
- Füge einen Filter hinzu auf die Abfrage, z. B. die letzten 90 Tage, damit die Datentabelle klein und schnell bleibt und dem Zeilenlimit Ihres Tarifs entspricht.
- Handgeschriebene Notizen sollten in separaten Spalten aufbewahrt werden., außerhalb der Abfrage, sodass sie jeden Synchronisierungsvorgang überstehen.
- Gruppieren Sie Ihre Automatisierungen Sobald Sie einige im Bearbeitungsbereich ausgewählt haben, können Sie auf der Seite „Automatisierung“ nach Gruppen filtern.
Reaching a file on a network share
The Agent opens files as a background service, not as you, so a file on another computer needs one extra step. Which step depends on the computer the Agent runs on.
If the test cannot get to the share, look for these words in its result: unreachable means the Agent’s computer got no answer from the server. On Linux or a Mac, not mounted means the share still has to be mounted, and that message includes the exact mount command for your server.
DuckDB file on a share? DuckDB allows one writer at a time, so the Agent cannot open a file that another program has open for writing; on a \\server\share path the test says it is open for writing by another program. Close it there, or point the connector at a file nobody is writing to. Every query reads the file across the network, so a large file answers more slowly than it would from a local disk.
Test failed on a share?
Every run reaches the file the same way the connection test does. If runs start failing after something changed on the file server, a new password for example, open the connector in Datenagenten und klicken Sie Testverbindung. The test result, and the line under the file path, name the problem:
| Nachricht | Ursache | Fix |
|---|---|---|
| DuckDB database file not found: followed by a \\server\share path you know is right | No login is stored, so the Agent tried the share as its own account and could not see the file: the share turned that account away, or the server did not answer. In the first case the line under the path says Access denied for the agent’s service account. | Klicken Sie auf Service identity under the path and store a login that can read the share. If the line under the path does not say access denied, check that the Agent’s computer can open the share at all. |
| Share \\server: access denied — add credentials for this server | A login is stored, but that account has no permission on the share, or another sign-in to the same server is in the way; the message before this line says which. | Ask whoever runs the server to give that account read access, or store an account that has it. For a sign-in in the way, see the two rows on one login per server below. |
| Share \\server: the credentials were refused — check the username and password | The server turned the stored login down: a typo, the wrong domain, or a password changed since it was saved, which also stops runs that used to work. | Click the chip under the path and type the password again; for an account made on the server itself, leave Domain blank. After a refused login the Agent waits a minute before it tries that same one again, so the account is not locked out; saving a corrected password tries straight away. |
| Share \\server: server unreachable from the agent machine | The Agent’s computer got no answer from the server: a wrong server name, the server is off, or a firewall blocks file sharing. | On the Agent’s computer, open the same \\server\share path in File Explorer. If that fails too, it is a network problem for whoever runs the network. |
| Another connector on this agent already signs in to \\server as … | Windows lets one computer sign in to a server as one account at a time, and another connector on this Agent uses a different login for that server. | Store the same login the other connector uses, or change it on every connector that reads that server. |
| Windows already holds a sign-in to \\server for … | Something on the Agent’s computer other than the Agent is already signed in to that server as a different account, and the Agent never closes a sign-in it did not make. | Do what the rest of the message says: use that same account on this connector, or close the other sign-in on the Agent’s computer. If it says the share is already readable through that sign-in, choose Use service identity in the login box instead. |
| This agent build cannot sign in to \\server with stored credentials. | The Agent is an older version that cannot use stored logins. | Update the Agent, then test again. |
| \\server\share is not mounted on this Linux agent (oder macOS agent) | The Agent runs on Linux or a Mac and the share has not been mounted on its computer yet; logins stored in the Portal are not used there. | Mount it with the command the message gives you, then test again. Step by step: auf Linux · on a Mac. |
| … is open for writing by another program | DuckDB allows one writer at a time, and another program has the file open for writing. | Close the file in that program, or point the connector at a file nobody is writing to. |
Fragen, die Menschen stellen
Werden durch die Synchronisierung die Notizen überschrieben, die mein Team in Anvil.works hinzufügt?
Nicht, wenn die Notizen in einer eigenen Spalte stehen. Spalten, die nur in Anvil.works und nicht in Ihrer Abfrage vorhanden sind, werden nie verändert. Fügen Sie daher neben den synchronisierten Spalten eine Spalte „Notizen“ oder „Besitzer“ hinzu und geben Sie die Daten dort ein. Synchronisierung werden bei jedem Durchlauf auf den DuckDB-Wert zurückgesetzt; Bewahren Die Spalten werden beim Eintreffen einer neuen Zeile gefüllt und anschließend nicht mehr verglichen.
Werden meine DuckDB-Daten von Query Streams gespeichert?
Nein. Der Agent führt die Abfrage serverseitig aus und sendet die Zeilen direkt über eine verschlüsselte Verbindung an Anvil.works. Query Streams speichert die Konfiguration, den Zeitplan und die Anzahl der Zeilen pro Ausführung, nicht die Zeilen selbst.
Muss mein Computer eingeschaltet bleiben?
Derjenige, auf dem der Agent läuft, ist dafür verantwortlich, da der Agent die Abfrage ausführt und die Daten an Anvil.works schreibt. Ihr eigener Laptop und Browser können geschlossen sein. Wenn dieser Computer ausgeschaltet ist, wenn ein Lauf fällig ist, wird der verpasste Lauf einmalig kurz nach dem Neustart des Agents ausgeführt.
Kann ich die Abfrage später ändern?
Ja. Bearbeiten und speichern Sie die Abfrage im Abfrage-Generator. Beim nächsten Durchlauf wird automatisch die neue Version verwendet. Wenn Sie Spalten hinzufügen oder entfernen, öffnen Sie den Bearbeitungsbereich der Automatisierung, um diese zuzuordnen.
Können zwei Automatisierungen in dieselbe Datentabelle schreiben?
Nein, eine Automatisierung pro Datentabelle. Richten Sie eine zweite Automatisierung auf eine andere Datentabelle aus oder erweitern Sie die Abfrage hinter der ersten.
Ist das im kostenlosen Tarif wirklich enthalten?
Ja. Der kostenlose Tarif ist ein dauerhafter Plan, keine befristete Testphase. Automatisierung ist in jedem Tarif enthalten; je nach Tarif variiert lediglich die Anzahl der Zeilen, die eine Abfrage pro Ausführung zurückgeben darf. Die genauen Leistungen des kostenlosen Tarifs finden Sie hier: Preisseite.
Verwandte Leitfäden
Jeder Leitfaden für DuckDB
Nicht ganz Ihre Konfiguration?
- Haben Sie einen Ordner mit Parquet-Dateien anstelle einer DuckDB-Datenbankdatei? Der Parquet-Ordner liest alle Dateien als eine einzige Tabelle → Parquet Folder
Setup trouble?
- Agent says the file or folder does not exist, or access is denied? Mapped drives, network shares, OneDrive and Linux home folders each need one fix → Where the Agent can read files from
- Agent shows Offline, or Test connection and Browse are greyed out? Check that the Agent is online → Is the Agent online?

