Voir les catégories

Synchroniser DuckDB avec Anvil.works selon une planification

Automatisation · Vers DuckDB sur Anvil.works

Garder Anvil.works en accord avec votre fichier DuckDB, selon un horaire

Rédigez votre requête SQL une seule fois. Query Streams l'exécute selon votre planification (de toutes les cinq minutes à une fois par semaine) et inscrit les lignes dans votre table de données Anvil.works. Associez les lignes par une clé pour que les modifications soient prises en compte et que les lignes non traitées soient supprimées, ou ajoutez-les simplement. Sans Zapier, sans scripts, sans exportations. Une quinzaine de minutes suffisent la première fois, et le forfait gratuit l'inclut.

Environ 15 minutes Aucun codage nécessaire Le fichier reste où il est. Toutes les 5 minutes à hebdomadaire
Vous êtes bloqué à un moment donné ? N'hésitez pas à nous demander. Ouvrir Soutien Dans la section « Flux de requêtes » (menu en haut à droite → Assistance), envoyez-nous un message. De vraies personnes le liront, et « Je ne comprends pas ce que cet écran demande » est une question tout à fait légitime.

Ce que vous obtiendrez

Logo DuckDBUne table de données Anvil.works contenant les lignes renvoyées par votre requête DuckDB et mise à jour régulièrement (toutes les cinq minutes à une fois par semaine), avec un récapitulatif des modifications apportées à chaque exécution. Par exemple :

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.

OÙ SE TROUVE LE DOSSIERordinateur de bureau, serveur ou celui de la maisonVotre fichier DuckDBventes.duckdb · reste iciAgent de flux de requêtesexécute la requête enregistréeà votre convenanceFlux de requêteslien cryptélignes seulement · écrites, non relues par nousLÀ OÙ TRAVAILLE VOTRE ÉQUIPEdans votre application AnvilAnvil.worksvotre tableau de données, mis à jour sur place
L'agent gère vos données et exécute la requête selon la planification. Anvil.works reçoit simplement les lignes. Aucune intervention de votre part n'est requise.

Ce dont vous aurez besoin

Un compte Query Streams

Le forfait gratuit suffit pour ce guide. Inscrivez-vous sur mon.querystreams.com.

DuckDB s'est connecté via l'agent

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? Connectez-vous d'abord à DuckDB; cela prend environ dix minutes.

Une requête enregistrée

La sélection que vous souhaitez synchroniser, enregistrée dans Générateur de requêtesL'étape 1 ci-dessous en présente un exemple. Si vous souhaitez que les lignes modifiées soient mises à jour directement, ajoutez une colonne unique pour chaque ligne, comme un identifiant.

Votre identifiant Anvil.works

Saisissez l'adresse HTTPS de votre application Anvil et la clé de connexion que vous avez définie dans l'application avec `connector.init_connector("key")` du module Query Streams. Query Streams vérifie les réponses de l'application et affiche ses tables de données.

Où se déroule le travail ? Sur l'ordinateur exécutant l'agent, la requête est exécutée selon la planification et les lignes sont enregistrées dans Anvil.works. Cet ordinateur doit donc rester allumé. Votre navigateur peut être fermé. Query Streams ne stocke jamais les lignes.

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.

Configurez-le en six étapes

  1. Enregistrez la requête que vous souhaitez conserver synchronisée.

    Ouvrir Générateur de requêtes, choisissez votre connexion DuckDB (pas encore connecté ? Commencez ici), et écrivez la requête SELECT qui renvoie exactement les lignes et les colonnes souhaitées dans Anvil.works. Celle-ci extrait quelques colonnes d'une base de données. commandes tableau:

    Exemple · SQL
    SELECT order_id, customer_name, order_total FROM main.orders ORDER BY order_total DESC LIMIT 100;

    Exécutez-le, puis Économiser Donnez-lui un nom facile à retenir, comme « Commandes pour Anvil.works ». Conservez une colonne unique pour chaque ligne de la requête SELECT, ici. numéro_de_commandeC’est cette clé que Full Sync utilise pour mettre à jour les lignes directement. Modifiez et enregistrez à nouveau la requête ultérieurement, et l’automatisation prendra en compte la modification lors de sa prochaine exécution.

  2. Ouvrez Automation et choisissez Anvil.works

    Dans le portail, ouvrez Automatisation (menu principal) Flux → Programmés → Automatisation) et cliquez Nouvelle automatisationLe magicien a cinq petits pas. Étape 1 cliquez sur Anvil.works carte.

    Vous voyez plutôt « Avant de commencer » ? L'assistant ne s'ouvre que lorsqu'un agent est en ligne et qu'au moins une requête est enregistrée. La page indique laquelle des trois requêtes est manquante et fournit un lien vers celle-ci.

  3. Connectez-vous à Anvil.works

    Sur Étape 2 Cette page vous guide à travers la partie Anvil : ajoutez le code de dépendance Query Streams à votre application sous Paramètres → Dépendances → Tiers, créez un module serveur avec depuis querystreams importer le connecteur et connecteur.init_connector("votre clé"), et cliquez Générer une clé sécurisée pour créer cette clé. Ensuite, saisissez votre URL de l'application Anvil et le même Clé d'authentification du connecteur et cliquez Test de connexionVotre application a besoin de... Tables accélérées activé (Paramètres → Tableaux de données) ; la page vérifie à nouveau pour vous.

  4. Choisissez où atterrissent les rangées

    Sur Étape 3 choisissez le Tableau de données Les lignes devraient être enregistrées dans le tableau. Créez-le d'abord dans votre application Anvil si vous souhaitez un tableau vide. S'il contient déjà des lignes, un aperçu les affiche et explique l'effet de chaque mode de synchronisation. Une automatisation par tableau.

  5. Choisissez la requête et décidez comment les lignes sont affichées.

    Sur Étape 4 ouvrir le Requête sauvegardée Sélectionnez la requête de l'étape 1. Query Streams l'exécute une fois pour lire les colonnes, vous indique le nombre de lignes renvoyées et affiche deux choix :

    Ajouter · rapide

    Ajouter

    Chaque exécution ajoute les lignes de la requête à la fin du tableau de données. Aucune donnée n'est mise à jour ni supprimée ; c'est donc la solution idéale pour la gestion rapide des journaux, événements et historiques. Aucune colonne clé n'est requise. Une ligne inchangée n'est pas ajoutée une seconde fois ; une ligne dont les valeurs ont changé est ajoutée en dessous, l'ancienne restant inchangée.

    Synchronisation complète · miroirs

    Synchronisation complète

    Les lignes sont appariées par un clé Une colonne comme un identifiant de commande. Les nouvelles lignes sont ajoutées, les lignes modifiées sont mises à jour directement, et les lignes qui ne sont plus renvoyées par la requête sont supprimées, y compris les lignes saisies manuellement dans la table de données. Il est donc conseillé de conserver ces dernières dans une autre table. Ce format est idéal pour la gestion des stocks, des pipelines, des données de référence et des tableaux de bord.

    La synchronisation complète est configurée par colonne, ce qui la rend utile dans une table de données partagée :

    Clé
    La colonne qui identifie une ligne, par exemple numéro_de_commande. Elle doit être unique dans le résultat de la requête ; Query Streams vérifie cela pour vous et refuse les doublons.
    Synchronisation
    Les données de DuckDB sont écrasées à chaque exécution. Si une colonne Sync est modifiée dans Anvil.works, la valeur source est rétablie lors de la prochaine exécution.
    Préserver
    Cette donnée est enregistrée lors de l'ajout de la ligne et n'est plus jamais comparée par la suite ; ainsi, toute modification apportée à cette donnée dans DuckDB ne déclenche pas de mise à jour. Pour les notes, les responsables et les dates de suivi saisis manuellement par votre équipe, utilisez une colonne qui n'est pas incluse dans la requête : les colonnes existant uniquement dans Anvil.works ne sont jamais affectées par la synchronisation.

    Lequel est le plus rapide ? L'ajout de données ne nécessite pas de lecture préalable du tableau. La synchronisation complète, quant à elle, lit le tableau, compare chaque ligne et n'écrit que les différences. Ce processus est donc plus long, mais garantit que le tableau correspond toujours à la requête. Vous pouvez modifier ce mode ultérieurement depuis le panneau d'édition de l'automatisation.

    Pour obtenir un tableau de données fiable, cliquez Créer toutes les colonnes en tant que synchrones, puis cliquez sur l'icône de clé sur numéro_de_commande pour en faire le CléQuery Streams analyse l'intégralité du résultat pour confirmer l'unicité de la clé et vous avertit dans le cas contraire. Conservez les notes de votre équipe dans des colonnes distinctes de la requête ; celles-ci ne seront jamais modifiées. Pour un journal qui ne cesse de s'enrichir, cliquez ici. Créer toutes les colonnes en tant que Conserver Cliquez plutôt et ignorez la clé. Continuer.

  6. Définissez le calendrier, nommez-le, créez-le

    Sur Étape 5 choisir Fonctionner selon un horaire et choisissez un Fréquence:

    FréquenceCourses
    Toutes les 5 minutestoutes les 5 minutes, la plus rapide autorisée
    Toutes les 15 minutestoutes les 15 minutes
    Toutes les 30 minutestoutes les 30 minutes
    Toutes les heuresau début de chaque heure
    Tous les jours à 9htous les jours à 9h00, par défaut
    Tous les jours à 6h du matintous les jours à 6h00
    En semaine à 9h du matinDu lundi au vendredi à 9h00
    Hebdomadaire (lundi 9h)tous les lundis à 9h00
    Programme personnalisévos propres minutes, heures, jours de la semaine ou jours du mois

    Les temps suivent le Fuseau horaire vous choisissez, qui commence par celui de votre navigateur. Vous pouvez également choisir Manuel uniquement et presse Exécuter Vous pouvez programmer les exécutions à tout moment ; il est possible d'ajouter une planification ultérieurement depuis le panneau d'édition de l'automatisation. Les exécutions planifiées s'effectuent sur l'Agent et continuent donc de fonctionner même lorsque votre navigateur est fermé. Si l'ordinateur exécutant l'Agent est éteint lors d'une exécution prévue, celle-ci sera effectuée une seule fois, peu après le redémarrage de l'Agent.

    Donnez-lui un Nom de l'intégration, comme « Commandes à Anvil.works, quotidiennement », vérifiez le Prêt à créer résumé et clic Créer une automatisationDe retour sur la page Automatisation, appuyez sur Exécuter Il est préférable d'effectuer la première synchronisation dès maintenant plutôt que d'attendre la planification. Ouvrez Anvil.works : les lignes s'y trouvent, sous les en-têtes de colonnes.

C'est ça. Désormais, la table de données se met à jour automatiquement. Seules les lignes renvoyées par la requête quittent votre réseau, et personne n'a besoin de se souvenir d'exécuter quoi que ce soit.

Ce que vous voyez ensuite

Le page d'automatisation Affiche chaque automatisation avec son statut, sa source, sa cible, sa clé, sa planification, sa dernière synchronisation et le nombre de lignes. Ouvrez-en une pour la Exécutions Onglet : chaque exécution avec son déclencheur (manuel ou planifié), sa durée et les lignes créées, mises à jour, supprimées et inchangées. Performance L'onglet affiche les données traitées et le taux de réussite sur une période de 7 à 90 jours.

On vous prévient quand cela s'arrête.

Chaque organisation a un Problèmes de synchronisation Règle d'alerte dès le départ : une notification dans l'application et un e-mail en cas d'échec de synchronisation, puis un autre une fois la synchronisation rétablie. Un seul message par incident, jamais par tentative de resynchronisation. Vous pouvez désactiver cette option ou modifier les canaux dans Flux → Alertes et rapports.

Il s'arrête quand il le devrait

Si Anvil.works cesse d'accepter la connexion ou si le connecteur de données est supprimé, l'automatisation s'interrompt et affiche le motif. Reconnectez-vous ou sélectionnez une nouvelle source, puis cliquez sur Reprendre. Les autres erreurs maintiennent l'exécution et s'affichent sur la ligne correspondante.

Les clés doivent être uniques

Avant chaque synchronisation complète, Query Streams vérifie l'unicité des valeurs clés dans le résultat de votre requête et refuse l'exécution dans le cas contraire. Ainsi, aucune donnée incomplète n'est intégrée à votre table. Conservez la colonne clé dans Anvil ; les colonnes inconnues de votre requête ne sont jamais supprimées lors d'une synchronisation.

Ce que les plans permettent

L'automatisation est incluse dans tous les forfaits, y compris le forfait gratuit, sans limite quant au nombre d'automatisations que vous pouvez créer. Chaque forfait limite cependant le nombre de lignes qu'une requête peut renvoyer par exécution.

PlanLignes par exécution
Gratuit125
Noyau personnel500
Personnel Plus1,000
Cœur de métier2,500
Business Plus5,000
Business Max10,000
Noyau d'entreprise25,000
Entreprise Plus100,000
Enterprise Max250,000

Si une requête renvoie davantage de résultats, son exécution est suspendue au lieu d'être interrompue. L'automatisation vous indique alors le plan d'exécution le plus adapté ou vous suggère d'ajouter un filtre, comme une plage de dates. Chaque exécution réussie est également décomptée de votre quota Data Realm, le même que celui utilisé par vos requêtes Excel et Sheets. Consultez la page des prix pour les indemnités.

Bonnes prochaines étapes

  • Ajouter un filtre à la requête, par exemple les 90 derniers jours, afin que la table de données reste petite et rapide et respecte la limite de lignes de votre forfait.
  • Conservez les notes manuscrites dans leurs propres colonnes., en dehors de la requête, afin qu'elles survivent à chaque synchronisation.
  • Regroupez vos automatisations Depuis le panneau Édition, une fois que vous en avez quelques-uns ; la page Automatisation filtre par groupe.

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.

Fenêtres

Type the network path, like \\serveur\partage\dossier, never a mapped drive letter such as S:, which the Agent cannot see. If the share only lets in named people, click Service identity (the chip under the path) and store a login for that server: a company domain account, or an account made on the server itself with Domain left blank. The Agent then signs in to that server and reads the file there, and every connector on that Agent that reads the same server must use the same login. Without a login, it reads as its own service account, which a company domain sees as the computer itself. Step by step on Windows

Linux

Share logins stored in the Portal are not used on Linux: an administrator mounts the share on the Agent’s computer first, in a folder under /mnt ou /médias, because the Agent’s service cannot see /home ou /run/user. In the connector, keep the \\serveur\partage path, which the Agent maps onto the mount, or type the mount path instead, such as /mnt/fileserver-shared/Accounts. How to mount a share on Linux

Mac

Share logins stored in the Portal are not used on a Mac: mount the share first from Terminal with sudo, in a folder under /Volumes, so the Agent’s background service can see it. In the connector, keep the \\serveur\partage path, which the Agent maps onto the mount, or type the mount path instead, such as /Volumes/fileserver-shared/Accounts. How to mount a share on a Mac

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 \\serveur\partage 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 Agents de données et cliquez Test de connexion. The test result, and the line under the file path, name the problem:

MessageCauseRéparer
DuckDB database file not found: followed by a \\serveur\partage path you know is rightNo 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.Cliquez sur 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 serverA 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 passwordThe 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 machineThe 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 \\serveur\partage 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 (ou 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: sous Linux · on a Mac.
… is open for writing by another programDuckDB 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.

Questions que se posent les gens

La synchronisation écrasera-t-elle les notes ajoutées par mon équipe dans Anvil.works ?

Sauf si les notes se trouvent dans leur propre colonne. Les colonnes qui existent uniquement dans Anvil.works et non dans votre requête ne sont jamais modifiées. Ajoutez donc une colonne « Notes » ou « Propriétaire » à côté des colonnes synchronisées et saisissez-y vos notes. Les colonnes marquées Synchronisation sont rétablies à la valeur DuckDB à chaque exécution ; Préserver Les colonnes sont remplies dès l'arrivée d'une ligne et ne sont plus comparées par la suite.

Mes données DuckDB sont-elles stockées par Query Streams ?

Non. L'agent exécute la requête sur votre serveur et envoie directement les lignes à Anvil.works via une connexion chiffrée. Query Streams conserve la configuration, la planification et le nombre de lignes par exécution, mais pas les lignes elles-mêmes.

Mon ordinateur doit-il rester allumé ?

C'est l'ordinateur qui exécute l'Agent qui lance la requête et écrit dans Anvil.works. Votre ordinateur portable et votre navigateur peuvent être fermés. Si cet ordinateur est éteint lors d'une exécution prévue, l'exécution manquée sera effectuée une seule fois, peu après le redémarrage de l'Agent.

Puis-je modifier la requête ultérieurement ?

Oui. Modifiez et enregistrez la requête dans le Générateur de requêtes ; la prochaine exécution utilisera automatiquement la nouvelle version. Si vous ajoutez ou supprimez des colonnes, ouvrez le panneau d'édition de l'automatisation pour les associer.

Deux automatisations peuvent-elles écrire dans la même table de données ?

Non, une seule automatisation par table de données. Vous pouvez créer une deuxième automatisation pour cibler une autre table de données, ou élargir la requête de la première.

Le forfait gratuit couvre-t-il vraiment cela ?

Oui. L'offre gratuite est un forfait permanent, et non une période d'essai. L'automatisation est incluse dans tous les forfaits ; seul le nombre de lignes qu'une requête peut renvoyer par exécution varie selon le forfait. Consultez la liste complète des éléments inclus dans l'offre gratuite. page de tarification.

Toujours bloqué ? Ouvrir Soutien Dans Query Streams, indiquez-nous l'étape à laquelle vous vous trouvez et ce que vous voyez. Nous vous mettrons en relation.
La même requête enregistrée peut également être synchronisée avecGoogle SheetsAirtableSmartsheetBaserowTable de la meret plus encore

Chaque guide pour DuckDB

Ce n'est pas tout à fait votre configuration ?

  • Vous avez un dossier de fichiers Parquet plutôt qu'un fichier de base de données DuckDB ? Le dossier Parquet les lit tous comme une seule table → 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?
Updated on octobre 12, 2026

Powered by BetterDocs