Wie kann ich Faraday / Scan dazu bringen, eine ganze DynamoDB-Tabelle zu durchlaufen?

Bob Cook

Ich kämpfe um die Faradaysche Beschwörung, um eine ganze DDB-Tabelle zu scannen. Die folgende Funktion erzeugt eine Ausgabe, gibt jedoch weit weniger Ergebnisse zurück als die mir bekannten 18 Millionen Datensätze in der Tabelle.

(far/scan 
  common/client-opts 
  v2-index/layer-table-name
  {:return #{:layer-key :range-key}})
=>
[{:range-key "soil&2015-07-22T15:13:09.101Z&ssurgo&v1", :layer-key "886985&886985"}
 {:range-key "soil&2015-07-29T19:20:09.973Z&ssurgo&v1", :layer-key "886985&886985"}
  ...
 {:range-key "veg&2014-05-29T16:16:31.000Z&true-color&v1", :layer-key "1674603&1674603"}
 {:range-key "veg&2014-06-14T16:16:39.000Z&abs&v1", :layer-key "1674603&1674603"}]

Was kann ich tun, damit Faraday alle Aufzeichnungen erledigt? Der Quellcode legt nahe, dass es eine :last-prim-kvsOption gibt, aber mir ist nicht klar, was dort hineingehen würde. Der Primärschlüssel in dieser DDB-Tabelle ist ein zusammengesetzter Primärschlüssel, der aus :layer-keyund besteht :range-key.

Bob Cook

Wenn es in den Speicher passt, funktioniert das ...

Der Schlüssel zum gesamten Schema besteht darin, die Opts-Map mit einem :limit 99Mapping sowie einigen :span-reqs {:max 1}Mappings einzurichten . Das :span-reqsMapping ist für mich völlig unklar, aber es scheint der eigentliche Treiber für die konzeptionelle "Seitengröße" zu sein. Ich habe eine 10-Elemente-Tabelle wie ...

;; This only works on the whole table because the table is small!!!!
(far/scan
  common/client-opts
  "users.robert.kuhar.wtf_far"
  {:return #{:part_key :sort_key :note}})
=>
[{:part_key "456", :sort_key "fha.abs", :note "\"456\",\"fha.abs\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "456", :sort_key "fha.rank", :note "\"456\",\"fha.rank\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "456", :sort_key "fha.raw", :note "\"456\",\"fha.raw\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "456", :sort_key "fha.true-color", :note "\"456\",\"fha.true-color\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "456", :sort_key "soil.ssurgo", :note "\"456\",\"soil.ssurgo\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "123", :sort_key "fha.abs", :note "\"123\",\"fha.abs\" created 2016-12-08T21:24:30.139Z."}
 {:part_key "123", :sort_key "fha.rank", :note "\"123\",\"fha.rank\" created 2016-12-08T21:24:30.139Z"}
 {:part_key "123", :sort_key "fha.raw", :note "\"123\",\"fha.raw\" created 2016-12-08T21:24:30.139Z."}
 {:part_key "123", :sort_key "fha.true-color", :note "\"123\",\"fha.true-color\" created 2016-12-08T21:24:30.139Z."}
 {:part_key "123", :sort_key "soil.ssurgo", :note "\"123\",\"soil.ssurgo\" created 2016-12-08T21:24:30.139Z."}]

Wenn ich diese 4 Elemente gleichzeitig durchlaufen möchte, lautet der erste Aufruf ...

(far/scan
  common/client-opts
  "users.robert.kuhar.wtf_far"
  {:return #{:part_key :sort_key :note}
   :limit 4
   :span-reqs {:max 1}})
=>
[{:part_key "456", :sort_key "fha.abs", :note "\"456\",\"fha.abs\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "456", :sort_key "fha.rank", :note "\"456\",\"fha.rank\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "456", :sort_key "fha.raw", :note "\"456\",\"fha.raw\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "456", :sort_key "fha.true-color", :note "\"456\",\"fha.true-color\" created 2016-12-08T21:32:20.789Z."}]

Bei allen nachfolgenden Anrufen muss eine :last-prim-kvs {:part_key "xxx" :sort_key "yyy"}Karte festgelegt werden, die Faraday mitteilt, wo sie abholen soll. Für die 2. Seite ist der Anruf wie ...

(far/scan
  common/client-opts
  "users.robert.kuhar.wtf_far"
  {:return #{:part_key :sort_key :note}
   :limit 4
   :span-reqs {:max 1}
   :last-prim-kvs {:part_key "456" :sort_key "fha.true-color"}})
=>
[{:part_key "456", :sort_key "soil.ssurgo", :note "\"456\",\"soil.ssurgo\" created 2016-12-08T21:32:20.789Z."}
 {:part_key "123", :sort_key "fha.abs", :note "\"123\",\"fha.abs\" created 2016-12-08T21:24:30.139Z."}
 {:part_key "123", :sort_key "fha.rank", :note "\"123\",\"fha.rank\" created 2016-12-08T21:24:30.139Z"}
 {:part_key "123", :sort_key "fha.raw", :note "\"123\",\"fha.raw\" created 2016-12-08T21:24:30.139Z."}]

Die letzte Seite meiner 10-Elemente-Tabelle ist ...

(far/scan
  common/client-opts
  "users.robert.kuhar.wtf_far"
  {:return #{:part_key :sort_key :note}
   :limit 4
   :span-reqs {:max 1}
   :last-prim-kvs {:part_key "123" :sort_key "fha.raw"}})
=>
[{:part_key "123", :sort_key "fha.true-color", :note "\"123\",\"fha.true-color\" created 2016-12-08T21:24:30.139Z."}
 {:part_key "123", :sort_key "soil.ssurgo", :note "\"123\",\"soil.ssurgo\" created 2016-12-08T21:24:30.139Z."}]

Nur 2 Elemente, obwohl ich nach 4 gefragt habe. Der Versuch, weit darüber hinaus zu scannen, ist immer leer.

(far/scan
  common/client-opts
  "users.robert.kuhar.wtf_far"
  {:return #{:part_key :sort_key :note}
   :limit 4
   :span-reqs {:max 1}
   :last-prim-kvs {:part_key "123" :sort_key "soil.ssurgo"}})
=> []

Das geht also von Ende zu Ende, vorausgesetzt, alles passt in den Speicher.

(loop [accum []
       page (far/scan 
              client-opts 
              "users.robert.kuhar.wtf_far" 
              {:limit 4 
               :span-reqs {:max 1}})]
  (if (empty? page)
    accum
    (let [last-on-page (last page)
          last-part-key (:part_key last-on-page)
          last-sort-key (:sort_key last-on-page)]
      (recur
        (into accum page)
        (far/scan
          client-opts
          "users.robert.kuhar.wtf_far"
          {:limit 4
           :span-reqs {:max 1}
           :last-prim-kvs {:part_key last-part-key :sort_key last-sort-key}})))))
=>
[{:part_key "456", :sort_key "fha.abs", :note "\"456\",\"fha.abs\" created 2016-12-08T21:32:20.789Z."}
 ...
 {:part_key "123", :sort_key "soil.ssurgo", :note "\"123\",\"soil.ssurgo\" created 2016-12-08T21:24:30.139Z."}]

Ich denke, die traurige endgültige Antwort im Fall von "Wie kann ich Faraday / Scan dazu bringen, eine ganze DynamoDB-Tabelle zu durchlaufen?" ist, dass es nicht kann. Sie müssen es von Hand bauen.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie kann ich gdb dazu bringen, eine ganze Funktion zu zerlegen?

Wie kann ich MATLAB dazu bringen, eine Funktion zu ignorieren?

Ich kann kein COOKIE dazu bringen, seinen Wert zu aktualisieren (was eine ganze Zahl ist).

Wie kann ich meine MySQL-Tabelle dazu bringen, eine Gleitkommazahl von bis zu 20 Stellen zu speichern?

Wie kann man eine Tabelle in Postgresql dazu bringen, eine Sequenz mit einer anderen Tabelle zu teilen?

Wie kann ich meine Löschfunktion dazu bringen, eine ganze Zeile zu löschen, die das enthält, was ich eingegeben habe, anstatt nur das, was ich eingegeben habe?

Wie kann ich meinen VBA-Code dazu bringen, alle Blätter in der Arbeitsmappe zu durchlaufen?

Wie kann ich meine Schleife dazu bringen, meine Liste zu durchlaufen?

Wie kann ich eine Docker-Flask-App dazu bringen, eine Ausgabe in eine Datei zu schreiben?

Wie kann ich jedem Kreis in einem Raster eine zufällige Farbe zuweisen und dann jeden Kreis dazu bringen, das Farbspektrum von der Startfarbe an zu durchlaufen?

Wie kann ich diesen Algorithmus dazu bringen, ganze Zahlen zurückzugeben, wenn eine Divisionsoperation ausgeführt wird?

Wie kann ich eine UICollectionView programmgesteuert dazu bringen, eine UITableViewCell zu füllen?

Wie kann ich RadioSelect dazu bringen, jede Auswahl für ein bestimmtes Feld zu durchlaufen, wenn ich sie manuell schreibe?

Wie kann ich PHP dazu bringen, eine Eingabe genau wie C # zu signieren?

Wie kann man ein Skript dazu bringen, jede Zeile der txt-Datei zu durchlaufen und eine Funktion auszuführen?

Wie kann man Pyautogui dazu bringen, einen Link in Google einzugeben und eine vom Benutzer festgelegte Anzahl von Malen zu durchlaufen?

Wie kann ich einen Server dazu bringen, eine Benachrichtigung zu drucken, sobald ein Client eine Verbindung dazu herstellt?

Wie kann ich eine Vorlage dazu bringen, eine Methode aufzurufen?

Wie kann ich Gmaps.js dazu bringen, eine Route zwischen dynamischen Markierungen Javascript zu zeichnen?

Wie kann ich eine SKAction dazu bringen, sich nach einer zufälligen Zeitspanne zu wiederholen?

Wie kann ich Qt dazu bringen, eine benutzerdefinierte Klasse zu verwenden?

Wie kann ich Siri dazu bringen, eine App für ein bestimmtes Keyword zu starten?

Wie kann ich die Drive-API dazu bringen, eine Beschreibung der Datei zu drucken?

Wie kann ich eine Komponente dazu bringen, onClick in einer React-Funktionskomponente zu rendern?

Wie kann ich eine Snackbar dazu bringen, auf Press zu reagieren?

Wie kann ich conan dazu bringen, eine FindXXX.cmake zu generieren?

Wie kann ich venv dazu bringen, eine Python3.6-Binärdatei zu installieren?

Wie kann ich diese Komponente dazu bringen, ihren Wert an eine übergeordnete Komponente zu übergeben?

Wie kann ich Notepad ++ dazu bringen, sich an eine installierte Sprache zu erinnern?

TOP Liste

  1. 1

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

  2. 2

    Wie füge ich mehrere Spalten in einer Spalte mit derselben Tabelle in SQL Server zusammen?

  3. 3

    Wie kann man Gitterquadrate dazu bringen, die Farbe zu ändern?

  4. 4

    Ich kann nicht verstehen, wie man Go-Code in mehreren Dateien kompiliert

  5. 5

    Zählen Sie die Vorkommen jedes Werts in einem Tupel in Python

  6. 6

    Gibt es eine sauberere Möglichkeit, Konstruktorargumente und Instanzeigenschaften einer Klasse in Typescript zu definieren?

  7. 7

    So implementieren Sie Pushwoosh mit ionic 2

  8. 8

    Wie wird der Wert im Dropdown-Menü basierend auf den ausgewählten Daten / IDs angezeigt?

  9. 9

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  10. 10

    Ändern Sie den Knotenpfad in das aktuelle Verzeichnis

  11. 11

    So erstellen Sie ein Array von Objekten aus zwei Arrays von Objekten mit einem gemeinsamen Schlüssel - JavaScript

  12. 12

    Rufen Sie die ID aus der Datagrid-Ansicht ab und zeigen Sie die Daten in Textfeldern einem anderen Formular an

  13. 13

    base js: Wie füge ich einem Objekt eine Eigenschaft auf die 'alte' Weise hinzu?

  14. 14

    Ersetze einen Teil einer Zeichenfolge durch eine Pandas-Spalte als Muster

  15. 15

    Blättern Sie auf Radio Click zur Abschnitts-ID

  16. 16

    CBCentralManager wird nach dem Verbinden neu gestartet

  17. 17

    Scherz, wie man eine Funktion verspottet, die von einer verspotteten Funktion zurückgegeben wird

  18. 18

    django-allauth Empfängersignal zum Hinzufügen einer Gruppenberechtigung zum Benutzer bei der Anmeldung

  19. 19

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  20. 20

    AQL: Teilweise Übereinstimmung in einer Reihe von Zeichenfolgen

  21. 21

    So summieren Sie die Werte zweier Tabellen und gruppieren sie nach Datum

heißlabel

Archiv